Не удалось решить загадку с этим кодом - PullRequest
5 голосов
/ 24 июля 2010

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

Я ломал голову, но не мог решить эту проблему.

Удалить любой отдельный символ или оператор из приведенного выше кода, и программа должна напечатать "-" 20 раз

Пожалуйста, помогите!

Ответы [ 10 ]

24 голосов
/ 24 июля 2010

Я не думаю, что вы можете сделать это путем удаления символа, но у меня есть три решения, которые заменяют (ну, одно из них добавляет символ, но только потому, что вы в вашей программе нет пробелов. Если бы у вас были пробелы, они бы заменили пробел).

Раствор 1

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

Решение 2

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

Решение 3

int i,n=20;
for(i=0;i+n;i--) // while i + n is not zero 
    printf("-");
10 голосов
/ 24 июля 2010

Я нашел ссылку на проблему на C Puzzles .(Это в комментарии, так что, конечно, это не оригинальный источник.)

Ниже приведен фрагмент кода C, целью которого было напечатать знак минус 20 раз.Но вы можете заметить, что это не работает.

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

Хорошо исправить вышеприведенный код просто.Чтобы сделать проблему интересной, вы должны исправить приведенный выше код, изменив ровно один символ.Есть три известных решения.Посмотри, сможешь ли ты получить все эти три.

Обратите внимание, что в инструкциях сказано:

... Вы должны исправить вышеуказанный код, изменив ровно на один символ.

Одним из решений является изменение i-- на n-- в заголовке цикла for.

5 голосов
/ 24 июля 2010

Проблема, как указано, не имеет решения. Либо вы, либо кто-либо другой, кто поставил вам эту проблему, неправильно ее сформулировал.

2 голосов
/ 24 июля 2010

Головоломка должна позволять "менять одного персонажа".

Решения состоят в том, чтобы изменить <на +, изменить i на n или изменить пробел перед i в середине цикла for на - (там должны быть пробелы.) </p>

Ваш друг не получил вопрос. : -)

2 голосов
/ 24 июля 2010
int i,n=20;
for(i=0;i<n;n--)
printf("-");

Я не знаю, все ли в порядке, но замена i-- на n-- должна помочь

1 голос
/ 24 июля 2010

Программа уже печатает - 20 раз - и затем продолжает печатать ее намного позже.В загадке не сказано, что нужно печатать ее ровно 20 раз.

Если вам действительно нужно что-то удалить, то вы можете получить аналогичное поведение, удалив оператор --.

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

Другими символами, которые являются кандидатами на удаление, являются разрывы строк.

1 голос
/ 24 июля 2010
int i,n=20;
for(i=0;i<n;i--) //change i-- to i++
printf("-");

РЕДАКТИРОВАТЬ: вы использовали оператор приращения вместо приращения.Итак, вы хотите, чтобы он продолжал увеличивать i, пока не достигнет 20. В этот момент он остановится, потому что тогда я больше не буду меньше 20, но равен.

0 голосов
/ 24 июля 2010

Прошло много лет с тех пор, как я сделал c, и я педантичен, поэтому, пожалуйста, прости меня, но ... программа не печатает "-" уже 20 раз? А потом какой?

Если вы удалите «f» из «printf», не будет ли он продолжать печатать »-« 20 раз? Хотя бы?

Если это вопрос с подвохом, может быть, это подвох ...

0 голосов
/ 24 июля 2010

Изменить:

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

на:

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

Но я не вижу, как вы можете удалить только символ или оператора ... Вы должны изменить оператор или символ.

0 голосов
/ 24 июля 2010

Я могу сделать это, добавив один символ:

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