2010-07-23 42 views

Trả lời

24

Tôi không nghĩ rằng bạn có thể làm điều đó bằng cách xóa một nhân vật, nhưng tôi có ba giải pháp mà thay (tốt, một trong số họ cho biết thêm một nhân vật, nhưng chỉ vì bạn không có khoảng trắng trong chương trình của bạn. Nếu bạn có khoảng trống, nó sẽ thay thế một không gian).

Giải pháp 1

int i,n=20; 
for(i=0;-i<n;i--) // -i < n 
    printf("-"); 

Giải pháp 2

int i,n=20; 
for(i=0;i<n;n--) // n-- 
    printf("-"); 

Giải pháp 3

int i,n=20; 
for(i=0;i+n;i--) // while i + n is not zero 
    printf("-"); 
+5

+1 - Tôi sẽ gãi đầu trong một thời gian trước khi đưa ra giải pháp 3. –

1
int i,n=20; 
for(i=0;i<n;i--) //change i-- to i++ 
printf("-"); 

EDIT: Bạn đang sử dụng toán tử giảm thay vì gia tăng. Vì vậy, bạn muốn nó tiếp tục tăng tôi cho đến khi nó đạt đến 20. Tại thời điểm đó nó sẽ dừng lại bởi vì sau đó tôi sẽ không còn ít hơn 20 nhưng bằng.

+0

HOCUS POCUS - Câu hỏi cho biết Nhân vật đơn, những gì bạn nói đã đến với tâm trí của tôi .. nhưng người yêu cầu tôi không hài lòng. – Sadique

+0

"Xóa mọi ký tự hoặc toán tử đơn lẻ khỏi mã trên" - bạn đã thay thế hai ký tự. –

+0

Đó không phải là xóa mặc dù. Nó đang thay đổi nó thành thứ khác. –

0

tôi có thể làm điều đó bằng cách thêm một nhân vật duy nhất:

int i,n=20; 
for(i=0; - i <n;i--) 
    printf("-"); 
+1

Hơn nữa, tôi tin rằng bạn có thể cố gắng xóa từng nhân vật hoặc từng nhà điều hành, và thuyết phục bản thân rằng không có giải pháp nào xóa hoàn toàn một ký tự hoặc toán tử thỏa mãn câu hỏi. –

+0

Điều này sẽ in '-' khoảng 2 tỷ lần (trên một bộ xử lý 32 bit). -20 nhỏ hơn 20 ... -21 nhỏ hơn 20 ... –

+2

Vâng, nếu nó in 2 tỷ lần, nó chắc chắn sẽ in 20 lần ... –

2
int i,n=20; 
for(i=0;i<n;n--) 
printf("-"); 

Tôi không biết nếu thay thế là ok nhưng thay đổi i-- để n-- nên làm các trick

+0

Tôi đặt cược đây là những gì các poser tìm kiếm. ;) –

+0

Vâng, đó là về mặt kỹ thuật không phải là "xóa", vì vậy tôi không chắc chắn. –

+0

@Heath - là "poser" một phiếu Freudian? :) –

5

Vấn đề, như đã nêu, không có giải pháp. Hoặc là bạn hoặc bất cứ ai đưa ra vấn đề đó cho bạn đã tuyên bố nó không chính xác.

+3

Câu trả lời này yêu cầu bằng chứng chính thức. – intuited

+0

@intuited: Câu trả lời này cho phép bằng chứng brute-force, đã được đề cập trong một số nhận xét khác. Người ta chỉ có thể thử tất cả các biến thể có thể. Tôi không thấy điểm nào trong việc xuất bản loại chứng minh này một cách trọn vẹn. Nó là đủ để nói rằng tôi đã thực hiện nó :) – AnT

+0

Tôi tin rằng tôi sẽ không thể bác bỏ yêu cầu của bạn rằng bạn đã thực hiện nó. :) –

0

Thay đổi:

for(i=0;i<n;i--) 

tới:

for(i=0;i<n;n--) 

Nhưng tôi không thấy làm thế nào bạn chỉ có thể xóa char hoặc hành ... Bạn cần phải sửa đổi một điều hành hoặc ký tự.

2

Câu đố được cho là cho phép "thay đổi một ký tự".

Các giải pháp là thay đổi < đến +, thay đổi i đến n, hoặc thay đổi không gian trước khi tôi ở giữa các vòng lặp for để a - (có nghĩa vụ phải được không gian.)

bạn bè của bạn doesn' t nhận được câu hỏi.:-)

+0

Thay đổi < to > không hoạt động ... –

+0

Bạn nói đúng, tôi đã nhầm lẫn nó với một lời trêu ghẹo khác, nhưng tương tự. :) Rất tiếc! cố định – corsiKa

10

Tôi đã tìm thấy tham chiếu đến sự cố trên C Puzzles. (Đó là trong một bình luận, vì vậy nó chắc chắn không phải là nguồn gốc.)

Sau đây là một đoạn mã C, với ý định in dấu trừ 20 lần. Nhưng bạn có thể nhận thấy rằng, nó không hoạt động.

#include <stdio.h> 
int main() 
{ 
int i; 
int n = 20; 
for(i = 0; i < n; i--) 
printf("-"); 
return 0; 
} 

Vâng sửa chữa các mã trên là thẳng về phía trước. Để làm cho vấn đề trở nên thú vị, bạn phải sửa mã trên, bằng cách thay đổi chính xác một ký tự. Có ba giải pháp đã biết. Xem nếu bạn có thể nhận được tất cả ba.

Lưu ý rằng các hướng dẫn nói:

... bạn phải sửa đoạn mã trên, bởi thay đổi chính xác một ký tự.

Một giải pháp là thay đổi i-- thành n-- trong tiêu đề của vòng lặp for.

+1

Điều đó, tất nhiên, là một vấn đề khác. Trong vấn đề này, chúng tôi chỉ được phép "xóa một ký tự hoặc toán tử". – AnT

+0

Rất đẹp. Tôi cũng đang cố gắng tìm kiếm nó nhưng không thể tìm thấy gì cả. – spinon

+1

@spinon: Tôi có một ý tưởng khá hay về nơi bắt đầu tìm kiếm. Thật khó để tìm kiếm mã C cụ thể trên internet mở rộng. :) –

0

Đã nhiều năm kể từ khi tôi làm c, và tôi là người theo dõi, vì vậy hãy tha thứ cho tôi, nhưng ... chương trình không in "-" 20 lần rồi? Và sau đó, vài?

Nếu bạn xóa "f" khỏi "printf", nó có tiếp tục in "-" 20 lần không? Ít nhất?

Nếu đó là một câu hỏi trick, có lẽ đây là lừa ...

1

Chương trình đã in - 20 lần - và sau đó nó tiếp tục in nó sau đó nhiều hơn nữa. Câu đố không nói cần thiết để in nó chính xác 20 lần.

Nếu bạn thực sự phải xóa nội dung nào đó, bạn có thể có hành vi tương tự bằng cách xóa toán tử --.

int i,n=20; 
for(i=0;i<n;i) // no more decrement 
printf("-"); 

Các ký tự khác là ứng cử viên để xóa là ngắt dòng.

+0

tại sao không xóa 0 đầu tiên? – mvds

+0

Đó thực sự là một khả năng khác. –

Các vấn đề liên quan