|
цикл for и Си. задачка | ☑ | ||
---|---|---|---|---|
0
Wobland
06.04.12
✎
09:11
|
Дан текст программы на языке С. Требуется найти три способа изменить в нем один символ так, чтобы программа стала печатать 20 звездочек. Изменить — это значит не добавить, не убрать и не переставить, а именно поменять.
main() { int i, N=20; for (i = 0 ; i < N ; i--) { printf("*"); } } два способа нашёл, третий не выходит. поговаривают, есть и четвёртый... |
|||
1
Любопытная
06.04.12
✎
09:11
|
Ты сказал, что три нашел! Ах ты жулик!!!)
|
|||
2
Ranger_83
06.04.12
✎
09:12
|
Счас забанят за инокомыслие
|
|||
3
Wobland
06.04.12
✎
09:13
|
(1) это была цитата, я так и не нашёл
|
|||
4
Wobland
06.04.12
✎
09:13
|
(2) официальный язык форума - язык 1С? ;)
|
|||
5
Любопытная
06.04.12
✎
09:14
|
(3) (i = 0 ; i <-N ; i--) так можно?
|
|||
6
Wobland
06.04.12
✎
09:14
|
(5) гениально!
|
|||
7
Любопытная
06.04.12
✎
09:16
|
(6) Ага! Значит я быстрей тебя ее решила!
|
|||
8
Wobland
06.04.12
✎
09:16
|
+(6) вот что сертификат Профессионала с людьми делает ;)
|
|||
9
skunk
06.04.12
✎
09:16
|
i-- - это инкремент ... значит i будет принимать следующие значения ... 0, -1, -2 и т.д ... а значит будет всегда меньше 20 ... а значит напечтает не 20 зведочек а пока ты не нажмешь ктрл+с
|
|||
10
Fish
06.04.12
✎
09:17
|
(5) Так вроде добавлять символ нельзя? А -N - это добавление, а не изменение.
|
|||
11
Stepa86
06.04.12
✎
09:17
|
N-- написать?
|
|||
12
Stepa86
06.04.12
✎
09:17
|
(10) пробел заменил на минус
|
|||
13
spock
06.04.12
✎
09:17
|
(5)"(i = 0 ; i <-N ; i--) так можно?" - из условия задачи нельзя.
|
|||
14
skunk
06.04.12
✎
09:18
|
наверное правильне было так
main() { int i, N=0; for (i = 20 ; i < N ; i--) { printf("*"); } } |
|||
15
ReaLg
06.04.12
✎
09:18
|
Пробелы можно менять? :)
|
|||
16
Stepa86
06.04.12
✎
09:18
|
и вместо "; i < N ;" написать ";-i < N ;"
|
|||
17
Stepa86
06.04.12
✎
09:19
|
(14) никто не говорил, что изначально код рабочий
|
|||
18
skunk
06.04.12
✎
09:19
|
хотя нет
|
|||
19
Wobland
06.04.12
✎
09:19
|
(9) согласен. заставь делать 20 ;)
|
|||
20
Fish
06.04.12
✎
09:20
|
(14) Неправильно. Поменял больше одного символа :))
|
|||
21
ukolabrother
06.04.12
✎
09:21
|
main() { int i, N=20; for (i = 0 ; i < N ; ) { printf("*"); i--} }
|
|||
22
Wobland
06.04.12
✎
09:21
|
итого уже четыре способа. подведём промежуточные этоги:
main() { int i, N=20; for (i = 0 ; i <-N ; i--) { printf("*"); } } main() { int i, N=20; for (i = 0 ;-i < N ; i--) { printf("*"); } } |
|||
23
Wobland
06.04.12
✎
09:21
|
(21) ну это ваще. много добавил, надо _заменить_
|
|||
24
skunk
06.04.12
✎
09:21
|
(20)я не менял ... просто в условии код с ошибкой ... напечатает более 20 звездочек
|
|||
25
Wobland
06.04.12
✎
09:23
|
(24) нет в условии ошибки. просто вот такой вот код
|
|||
26
ReaLg
06.04.12
✎
09:23
|
i-- заменить на N-- ?
|
|||
27
Stepa86
06.04.12
✎
09:23
|
(22) а еще 2 какие?
|
|||
28
ukolabrother
06.04.12
✎
09:24
|
{
for (int i = 0 ; i < int N = 20 ; i--,printf("*")) } все я решил |
|||
29
Wobland
06.04.12
✎
09:24
|
(26) три
(27) если не терпится, стукнись в аську, народу, думаю, интересно будет подумать |
|||
30
Stepa86
06.04.12
✎
09:25
|
(29) ну третий то в (11) и (26)
|
|||
31
Wobland
06.04.12
✎
09:25
|
(28) плин, _заменить_ _один_ _символ_
|
|||
32
Stepa86
06.04.12
✎
09:26
|
четвертый main() { int i, N=20; for (i =20 ; i < N ; i--) { printf("*"); } }
|
|||
33
zak555
06.04.12
✎
09:26
|
main() { int i, N=21; for (i = 0 ; i < N ; i--) { printf("*"); } }
|
|||
34
Wobland
06.04.12
✎
09:26
|
уже четыре способа есть
main() { int i, N=20; for (i = 0 ; i < N ; N--) { printf("*"); } } main() { int i, N=20; for (i = 0 ;-i < N ; i--) { printf("*"); } } main() { int i, N=20; for (i = 0 ; i <-N ; i--) { printf("*"); } } |
|||
35
Wobland
06.04.12
✎
09:26
|
(32)(33) теплее
|
|||
36
Любопытная
06.04.12
✎
09:27
|
(32)i=40 же
|
|||
37
Stepa86
06.04.12
✎
09:27
|
в (32) не то воткнул =( main() { int i, N=20; for (i =40 ; i < N ; i--) { printf("*"); } }
|
|||
38
Stepa86
06.04.12
✎
09:28
|
+(37) эээээээээм... вот тока не работает это
|
|||
39
zak555
06.04.12
✎
09:29
|
(35) так у меня 20 и печатает
|
|||
40
Ненавижу 1С
гуру
06.04.12
✎
09:29
|
main() { int i, N=20; for (i =40 ; i < N ; i--) { printf("*"); } }
|
|||
41
wertyu
06.04.12
✎
09:29
|
(9) -- - это не инкремент, а декремент
|
|||
42
Wobland
06.04.12
✎
09:29
|
(39) код из (33)? i уйдёт за за ноль
|
|||
43
ReaLg
06.04.12
✎
09:30
|
(34) А разве
main() { int i, N=20; for (i = 0 ; i <-N ; i--) { printf("*"); } не выйдет из цикла на 1м шаге? |
|||
44
Wobland
06.04.12
✎
09:30
|
(43) хм...
|
|||
45
Любопытная
06.04.12
✎
09:31
|
(44) (43) прав. Я не гениальна)
|
|||
46
Wobland
06.04.12
✎
09:32
|
(45) зато умна, очаровательна и с сертификатом
|
|||
47
Stepa86
06.04.12
✎
09:32
|
(43) вот вот, поэтому и (36)(37)(40) не работают
|
|||
48
Любопытная
06.04.12
✎
09:34
|
main() { int i, N=20; for (i = 0 ;-i < N ; i--) { printf("*"); } }
раз i сразу уходит в минус, значит -i пойдет в гору |
|||
49
Wobland
06.04.12
✎
09:34
|
выходит, только два нашли?
main() { int i, N=20; for (i = 0 ; i < N ; N--) { printf("*"); } } main() { int i, N=20; for (i = 0 ;-i < N ; i--) { printf("*"); } } |
|||
50
Любопытная
06.04.12
✎
09:35
|
Но это только предположение)
|
|||
51
wertyu
06.04.12
✎
09:36
|
вот же все три уже написали
main() { int i, N=20; for (i = 40 ; i < N ; i--) { printf("*"); } } main() { int i, N=20; for (i = 0 ; i < N ; N--) { printf("*"); } } main() { int i, N=20; for (i = 0 ; i < -N ; i--) { printf("*"); } } |
|||
52
Wobland
06.04.12
✎
09:37
|
(51) i=40 вылетит на первом шаге
|
|||
53
napagokc
06.04.12
✎
09:37
|
main() { int i, N=20; for (i = 0 ; i < N ; i--) { printf("*"); } }
Хы, я уж начал сомневаться в своих знаниях Си, когда не увидел в первых же комментах, что код не верный. Так-то, забавно: N = 20; i = 0; Пока i < N Цикл i = i - 1; Сообщить("*"); КонецЦикла; ...и никого ничего не смущает, главное! )))) Бесконечный цикл? |
|||
54
Ненавижу 1С
гуру
06.04.12
✎
09:37
|
(51) 1 и 3 вроде кривые
|
|||
55
Любопытная
06.04.12
✎
09:39
|
(53) там же написано, что его надо изменить. Вы кроме кода ничего больше не читаете?
|
|||
56
wertyu
06.04.12
✎
09:39
|
(52) значит вот три
main() { int i, N=20; for (i = 0 ;-i < N ; i--) { printf("*"); } } main() { int i, N=20; for (i = 0 ; i < N ; N--) { printf("*"); } } main() { int i, N=20; for (i = 0 ; i < -N ; i--) { printf("*"); } } |
|||
57
Wobland
06.04.12
✎
09:39
|
(53) не, не смущает. надо заставить делать 20
|
|||
58
Stepa86
06.04.12
✎
09:39
|
Если написать -i--, то он упадет или внезапно сделает i++ ?
|
|||
59
Любопытная
06.04.12
✎
09:40
|
(58) это бессмысленно
|
|||
60
napagokc
06.04.12
✎
09:40
|
(55) Но там и не написано, что код не рабочий. Я внимательно прочитал условие, но сей код меня явно покоребил и я был искренне удивлен, что это не отразили в первых же комментах
|
|||
61
Wobland
06.04.12
✎
09:41
|
(60) код рабочий. просто неаккуратный
|
|||
62
Любопытная
06.04.12
✎
09:41
|
(56) -N не подходит. 0>-20 сразу
|
|||
63
Stepa86
06.04.12
✎
09:41
|
(59) ну если как то заменить i-- на i++, то будет работать
|
|||
64
napagokc
06.04.12
✎
09:42
|
(61) да, согласен. Холиварить не буду. Но думаю, что вы поняли, что я хотел сказать.
|
|||
65
wertyu
06.04.12
✎
09:43
|
(62) тогда заменим )
main() { int i, N=20; for (i = 0 ;-i < N ; i--) { printf("*"); } } main() { int i, N=20; for (i = 0 ; i < N ; N--) { printf("*"); } } main() { int i, N=20; for (i = 0 ; i < N ; i++) { printf("*"); } } |
|||
66
Любопытная
06.04.12
✎
09:44
|
(65) ты заменил два знака
|
|||
67
Stepa86
06.04.12
✎
09:44
|
(65) в третьем варианте почти не палишся
|
|||
68
wertyu
06.04.12
✎
09:46
|
(66), (67) ну почему же два? символ декремента заменён на символ инкремента )
|
|||
69
napagokc
06.04.12
✎
09:46
|
А разве можно ставить "минус" перед i? Это же не замена символа, а добавление нового?
|
|||
70
napagokc
06.04.12
✎
09:47
|
(69) или подразумевается замена пробела?
|
|||
71
Любопытная
06.04.12
✎
09:47
|
(69) там пробел есть, так что можно
|
|||
72
napagokc
06.04.12
✎
09:48
|
(71) Понял. Хотя, ИМХО, читерский способ ))
|
|||
73
Любопытная
06.04.12
✎
09:48
|
(70) сколько времени ты мне на глаза попадаешься, только сейчас смогла понять, что у тебя за ник))
|
|||
74
Wobland
06.04.12
✎
09:48
|
(68) оператор декремента, состоящий из двух символов, хотел сказать?
|
|||
75
Wobland
06.04.12
✎
09:48
|
(72) соответствует ТЗ, значит верный
|
|||
76
wertyu
06.04.12
✎
09:51
|
(74) заметил подмену понятий )) но это просто небольшой трюк, уловка ))
|
|||
77
napagokc
06.04.12
✎
09:51
|
что если заменить "printf" на "print"?
|
|||
78
napagokc
06.04.12
✎
09:52
|
+(77) или fprintf()
|
|||
79
napagokc
06.04.12
✎
09:54
|
куда все пропали-то? Если можно заменять пробел символом - то дофига подобных способов ведь. Не?
|
|||
80
napagokc
06.04.12
✎
09:55
|
а, туплю. Цикл ведь останется неверным (((
|
|||
81
Ненавижу 1С
гуру
06.04.12
✎
09:55
|
main() { int i, N=20; for (i = 0 ; i + N ; i--) { printf("*"); } }
|
|||
82
Любопытная
06.04.12
✎
09:56
|
Так получается пока только 2 способа нашли?
|
|||
83
Любопытная
06.04.12
✎
09:56
|
(81) и? бесконечно будет звездочки ляпать
|
|||
84
Stepa86
06.04.12
✎
09:58
|
(83) как раз рабочий вариант
|
|||
85
Ненавижу 1С
гуру
06.04.12
✎
09:58
|
(83) почему бесконечно, i станет равным -20, их сумма i+N будет 0, что есть false
|
|||
86
Любопытная
06.04.12
✎
10:00
|
(84) (85) Да, признаюю. Третий вариант получается
|
|||
87
Ненавижу 1С
гуру
06.04.12
✎
10:01
|
было так?
main() { int i, N=20; for (i = 0 ;-i < N ; i--) { printf("*"); } } |
|||
88
Ненавижу 1С
гуру
06.04.12
✎
10:01
|
+(87) было ((
|
|||
89
wertyu
06.04.12
✎
10:01
|
да всё
main() { int i, N=20; for (i = 0 ;-i < N ; i--) { printf("*"); } } main() { int i, N=20; for (i = 0 ; i < N ; N--) { printf("*"); } } main() { int i, N=20; for (i = 0 ; i + N ; i--) { printf("*"); } } |
|||
90
wertyu
06.04.12
✎
10:02
|
+(89) это я просто собрал в кучу )
|
|||
91
orefkov
06.04.12
✎
10:06
|
(5), (22) - неверно.
main() { int i, N=20; for (i = 0 ; i <-N ; i--) { printf("*"); } } Ни одного символа не напечатает. |
|||
92
Любопытная
06.04.12
✎
10:07
|
(91) это мы уже выяснили
|
|||
93
orefkov
06.04.12
✎
10:10
|
(92)
Сорри, не заметил |
|||
94
Капитан Смоллет
06.04.12
✎
10:13
|
Насмерть порванный баян:
Теоретически возможен четвёртый вариант (хотя его вероятность IMHO) довольно низка... main() { int i, N=20; for(N = 0 ; i < N ; i--) printf("*"); } ... - Каким образом? :) В i содержится мусор, если повезёт там будет 0x80000013 что даст 20 звёздочек... http://linuxportal.ru/forums/index.php/mv/msg/20434/0/0/ |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |