Форум программистов, компьютерный форум CyberForum.ru

Для заданного n необходимо определить, может ли выиграть игрок, делающий первый ход, при наилучших последующих ходах противника - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
vladius
1 / 1 / 0
Регистрация: 04.05.2012
Сообщений: 26
04.05.2012, 21:59     Для заданного n необходимо определить, может ли выиграть игрок, делающий первый ход, при наилучших последующих ходах противника #1
Здравствуйте, очень нужна помощь с этой задачей, нужно написать программу на С++(обязательно!)

Игра
(время на тест 1 секунда)

Условие

Задается натуральное число n (n < 1000). Двое играющих называют по очереди числа, меньшие 1000, по следующим правилам. Начиная с числа n, каждое новое число должно увеличивать одну из цифр предыдущего числа (возможно незначащий нуль) на 1, 2 или 3. Проигравшим считается тот, кто называет число 999. Для заданного n необходимо определить, может ли выиграть игрок, делающий первый ход, при наилучших последующих ходах противника. Вывести сообщение "First win" или "Second win". В случае возможности выигрыша первым игроком, требуется напечатать все его возможные выигрышные первые ходы.

Входные данные подготовлены в файле input.txt, содержащем единственное число n.

Выходные данные заносятся в файл output.txt.

В файл выводится сообщение "First win" или "Second win".
В случае возможности выигрыша первым игроком, во второй строке выходного файла через пробел выводятся все его выигрышные первые ходы в порядке возрастания.

Пример входных данных
16

Пример выходных данных
"First win"
19 36 216
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2012, 21:59     Для заданного n необходимо определить, может ли выиграть игрок, делающий первый ход, при наилучших последующих ходах противника
Посмотрите здесь:

C++ Проверить истинность высказывания: «Ферзь за один ход может перейти с одного поля на другое»
C++ Найти минимальную сумму у.е., заплатив которую игрок может попасть в правый нижний угол
C++ Игрок А объявляет двузначное число от 01 до 99. Игрок В меняет местами его цифры и прибавляет полученное число
Список клеток, которые конь может достичь за один ход C++
Рандом. При втором и последующих запусках программы выдаются те же числа, что и в первый раз C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
04.05.2012, 22:04     Для заданного n необходимо определить, может ли выиграть игрок, делающий первый ход, при наилучших последующих ходах противника #2
что-то я не понял, как в неё вообще проиграть можно? если число 998, я увеличиваю цифру 8 на 2 и получаю 990. Игра продолжается!
vladius
1 / 1 / 0
Регистрация: 04.05.2012
Сообщений: 26
04.05.2012, 22:07  [ТС]     Для заданного n необходимо определить, может ли выиграть игрок, делающий первый ход, при наилучших последующих ходах противника #3
Нееееет, в случае с 998, 8-мь можно увеличить только на 1-цу, игра длится до 999!
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
04.05.2012, 22:20     Для заданного n необходимо определить, может ли выиграть игрок, делающий первый ход, при наилучших последующих ходах противника #4
Цитата Сообщение от vladius Посмотреть сообщение
Проигравшим считается тот, кто называет число 999
Там ничего не сказано, до скольки игра длится, там просто говорится, что нельзя называть 999, чтоб не проиграть.
vladius
1 / 1 / 0
Регистрация: 04.05.2012
Сообщений: 26
04.05.2012, 22:29  [ТС]     Для заданного n необходимо определить, может ли выиграть игрок, делающий первый ход, при наилучших последующих ходах противника #5
Они играют до 999 т.е
800 добовляю на 1 = 900......всё больше 9 уже быть не может
900 добовляю на 3 = 930
ещё на 3 = 960
и ещё на 3 = 990...всё больше 99 быть не может, остаётся доиграть только до 9-ти......
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
05.05.2012, 06:49     Для заданного n необходимо определить, может ли выиграть игрок, делающий первый ход, при наилучших последующих ходах противника #6
Непонятно по условию, что выводить при n равном 999. Ведь новое число никто не сможет назвать.
А для остальных случаев можно применить такой алгоритм:
Заводим массив размером 999. В нем будем помечать проигрышные и выигрышные позиции. Также нужна будет очередь в которой будут храниться очередные обрабатываемые позиции.
Начинаем с конца - с 999.
Проигрышные позиции: 998, 989, 899 (получаются отниманием 1 от каждого разряда).
Затем с каждой из проигрышных позиций вычисляем выигрышные позиции. Например для 998 выигрышные позиции будут:
997, 996, 995, 988, 978, 968, 898, 798, 698 (получаются отниманием 1,2,3 от каждого разряда).
Затем из этих выигрышных позиций делаем проигрышные (опять отниманием 1 от каждого разряда):
например для 997: 996 - не будет проигрышной позицией, т.к. оно уже выигрышное. 897 и 987 - тоже не будут проигрышными позициями, т.к. по другим линиям, они тоже будет уже выигрышными.
и т.д.
vladius
1 / 1 / 0
Регистрация: 04.05.2012
Сообщений: 26
05.05.2012, 11:33  [ТС]     Для заданного n необходимо определить, может ли выиграть игрок, делающий первый ход, при наилучших последующих ходах противника #7
Я рассказал ему выше написанное, препод сказал что нужен 3-х мерный массив......т.е. если все последующие позиции в твоей клетке проигрышные, значит у тебя выигрышная клетка, и проиграет 2-ой игрок...(рассматривается куб)
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
05.05.2012, 21:20     Для заданного n необходимо определить, может ли выиграть игрок, делающий первый ход, при наилучших последующих ходах противника #8
Цитата Сообщение от vladius Посмотреть сообщение
если все последующие позиции в твоей клетке проигрышные, значит у тебя выигрышная клетка, и проиграет 2-ой игрок
в этом Ваш преподаватель прав (и это полностью совпадает с алгоритмом который я написал).

Цитата Сообщение от vladius Посмотреть сообщение
препод сказал что нужен 3-х мерный массив.
Я готов написать код с использованием всего двух одномерных массивов типа int размерами 1000 элементов каждый, и утереть нос Вашему преподавателю, который считает единственным решением использование 3-х мерного массива. Есть ссылка на тестирующую систему? Если нет, то есть возможность Вам самому где-то проверить мой код?
vladius
1 / 1 / 0
Регистрация: 04.05.2012
Сообщений: 26
05.05.2012, 23:35  [ТС]     Для заданного n необходимо определить, может ли выиграть игрок, делающий первый ход, при наилучших последующих ходах противника #9
Ну напишите код хоть с одномерным массивом(можно на вкус), только должно быть int main{ ..... return0}
Я могу проверить в системе, если будут ошибки, то я Вам отпишу)
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
06.05.2012, 08:25     Для заданного n необходимо определить, может ли выиграть игрок, делающий первый ход, при наилучших последующих ходах противника #10
Цитата Сообщение от vladius Посмотреть сообщение
только должно быть int main{ ..... return0}
как скажете. проверяйте:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
#include <stdio.h>
 
int main()
{
    int a[1000]={0}, Q[1000], i_st=0, i_end=1, n, fl;
    scanf("%d", &n);
    a[999]=1; Q[0]=999;
    while(i_st<i_end)
    {
        if(a[Q[i_st]]==1)
        {
            if(Q[i_st]%10>0 && a[Q[i_st]-1]==0)
            {
                fl=1;
                if(Q[i_st]%10+1<10 && a[Q[i_st]+1]==2)
                    fl=0;
                if(Q[i_st]%10+2<10 && a[Q[i_st]+2]==2)
                    fl=0;
                if((Q[i_st]/10)%10+1<10 && a[Q[i_st]+9]==2)
                    fl=0;
                if((Q[i_st]/10)%10+2<10 && a[Q[i_st]+19]==2)
                    fl=0;
                if((Q[i_st]/10)%10+3<10 && a[Q[i_st]+29]==2)
                    fl=0;
                if((Q[i_st]/100)%10+1<10 && a[Q[i_st]+99]==2)
                    fl=0;
                if((Q[i_st]/100)%10+2<10 && a[Q[i_st]+199]==2)
                    fl=0;
                if((Q[i_st]/100)%10+3<10 && a[Q[i_st]+299]==2)
                    fl=0;
                if(fl==1)
                {
                    a[Q[i_st]-1]=2;
                    Q[i_end++]=Q[i_st]-1;
                }
                else
                {
                    if(a[Q[i_st]-1]==0)
                    {
                        a[Q[i_st]-1]=1;
                        Q[i_end++]=Q[i_st]-1;
                    }
                }
            }
            if((Q[i_st]/10)%10>0 && a[((Q[i_st]/10)-1)*10+Q[i_st]%10]==0)
            {
                fl=1;
                if(Q[i_st]%10+1<10 && a[Q[i_st]-9]==2)
                    fl=0;
                if(Q[i_st]%10+2<10 && a[Q[i_st]-8]==2)
                    fl=0;
                if(Q[i_st]%10+3<10 && a[Q[i_st]-7]==2)
                    fl=0;
                if((Q[i_st]/10)%10+1<10 && a[Q[i_st]+10]==2)
                    fl=0;
                if((Q[i_st]/10)%10+2<10 && a[Q[i_st]+20]==2)
                    fl=0;
                if((Q[i_st]/100)%10+1<10 && a[Q[i_st]+90]==2)
                    fl=0;
                if((Q[i_st]/100)%10+2<10 && a[Q[i_st]+190]==2)
                    fl=0;
                if((Q[i_st]/100)%10+3<10 && a[Q[i_st]+290]==2)
                    fl=0;
                if(fl==1)
                {
                    a[((Q[i_st]/10)-1)*10+Q[i_st]%10]=2;
                    Q[i_end++]=((Q[i_st]/10)-1)*10+Q[i_st]%10;
                }
                else
                {
                    if(a[((Q[i_st]/10)-1)*10+Q[i_st]%10]==0)
                    {
                        a[((Q[i_st]/10)-1)*10+Q[i_st]%10]=1;
                        Q[i_end++]=((Q[i_st]/10)-1)*10+Q[i_st]%10;
                    }
                }
            }
            if((Q[i_st]/100)%10>0 && a[((Q[i_st]/100)-1)*100+Q[i_st]%100]==0)
            {
                fl=1;
                if(Q[i_st]%10+1<10 && a[Q[i_st]-99]==2)
                    fl=0;
                if(Q[i_st]%10+2<10 && a[Q[i_st]-98]==2)
                    fl=0;
                if(Q[i_st]%10+3<10 && a[Q[i_st]-97]==2)
                    fl=0;
                if((Q[i_st]/10)%10+1<10 && a[Q[i_st]-90]==2)
                    fl=0;
                if((Q[i_st]/10)%10+2<10 && a[Q[i_st]-80]==2)
                    fl=0;
                if((Q[i_st]/10)%10+3<10 && a[Q[i_st]-70]==2)
                    fl=0;
                if((Q[i_st]/100)%10+1<10 && a[Q[i_st]+100]==2)
                    fl=0;
                if((Q[i_st]/100)%10+2<10 && a[Q[i_st]+200]==2)
                    fl=0;
                if(fl==1)
                {
                    a[((Q[i_st]/100)-1)*100+Q[i_st]%100]=2;
                    Q[i_end++]=((Q[i_st]/100)-1)*100+Q[i_st]%100;
                }
                else
                {
                    if(a[((Q[i_st]/100)-1)*100+Q[i_st]%100]==0)
                    {
                        a[((Q[i_st]/100)-1)*100+Q[i_st]%100]=1;
                        Q[i_end++]=((Q[i_st]/100)-1)*100+Q[i_st]%100;
                    }
                }
            }
        }
        else
        {
            if(Q[i_st]%10>0 && a[Q[i_st]-1]==0)
            {
                a[Q[i_st]-1]=1;
                Q[i_end++]=Q[i_st]-1;
            }
            if((Q[i_st]/10)%10>0 && a[((Q[i_st]/10)-1)*10+Q[i_st]%10]==0)
            {
                a[((Q[i_st]/10)-1)*10+Q[i_st]%10]=1;
                Q[i_end++]=((Q[i_st]/10)-1)*10+Q[i_st]%10;
            }
            if((Q[i_st]/100)%10>0 && a[((Q[i_st]/100)-1)*100+Q[i_st]%100]==0)
            {
                a[((Q[i_st]/100)-1)*100+Q[i_st]%100]=1;
                Q[i_end++]=((Q[i_st]/100)-1)*100+Q[i_st]%100;
            }
            if(Q[i_st]%10>1 && a[Q[i_st]-2]==0)
            {
                a[Q[i_st]-2]=1;
                Q[i_end++]=Q[i_st]-2;
            }
            if((Q[i_st]/10)%10>1 && a[((Q[i_st]/10)-2)*10+Q[i_st]%10]==0)
            {
                a[((Q[i_st]/10)-2)*10+Q[i_st]%10]=1;
                Q[i_end++]=((Q[i_st]/10)-2)*10+Q[i_st]%10;
            }
            if((Q[i_st]/100)%10>1 && a[((Q[i_st]/100)-2)*100+Q[i_st]%100]==0)
            {
                a[((Q[i_st]/100)-2)*100+Q[i_st]%100]=1;
                Q[i_end++]=((Q[i_st]/100)-2)*100+Q[i_st]%100;
            }
            if(Q[i_st]%10>2 && a[Q[i_st]-3]==0)
            {
                a[Q[i_st]-3]=1;
                Q[i_end++]=Q[i_st]-3;
            }
            if((Q[i_st]/10)%10>2 && a[((Q[i_st]/10)-3)*10+Q[i_st]%10]==0)
            {
                a[((Q[i_st]/10)-3)*10+Q[i_st]%10]=1;
                Q[i_end++]=((Q[i_st]/10)-3)*10+Q[i_st]%10;
            }
            if((Q[i_st]/100)%10>2 && a[((Q[i_st]/100)-3)*100+Q[i_st]%100]==0)
            {
                a[((Q[i_st]/100)-3)*100+Q[i_st]%100]=1;
                Q[i_end++]=((Q[i_st]/100)-3)*100+Q[i_st]%100;
            }           
        }
        i_st++;
    }
    fl=1;
    if(n%10<9 && a[n+1]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        printf("%d ", n+1);
        fl=0;
    }
    if(n%10<8 && a[n+2]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        printf("%d ", n+2);
        fl=0;
    }
    if(n%10<7 && a[n+3]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        printf("%d ", n+3);
        fl=0;
    }
    if((n/10)%10<9 && a[n+10]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        printf("%d ", n+10);
        fl=0;
    }
    if((n/10)%10<8 && a[n+20]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        printf("%d ", n+20);
        fl=0;
    }
    if((n/10)%10<7 && a[n+30]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        printf("%d ", n+30);
        fl=0;
    }
    if((n/100)<9 && a[n+100]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        printf("%d ", n+100);
        fl=0;
    }
    if((n/100)<8 && a[n+200]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        printf("%d ", n+200);
        fl=0;
    }
    if((n/100)<7 && a[n+300]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        printf("%d ", n+300);
        fl=0;
    }
    if(fl==1)
        printf("Second win\n");
    return 0;
}
vladius
1 / 1 / 0
Регистрация: 04.05.2012
Сообщений: 26
06.05.2012, 14:05  [ТС]     Для заданного n необходимо определить, может ли выиграть игрок, делающий первый ход, при наилучших последующих ходах противника #11
Мне нужно было, что бы чисдо n считывалось из файла(input.txt) и записывалась в файл(output.txt).
Я вот тут сделал, только оно всё равно просит ввести число n с консоли, что делать?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
#include <stdio.h>
 
int main()
{
 
    int a[1000]={0}, Q[1000], i_st=0, i_end=1, n, fl;
    a[999]=1; Q[0]=999;
 
    FILE *file = fopen("input.txt","r");
     if (file == NULL)
        printf ("Ошибка при открытии файла");
     else {
        while (!feof(file))
        {
        fread(&n, sizeof(int),1, file);
        }
     }
    
    while(i_st<i_end)
    {
        if(a[Q[i_st]]==1)
        {
            if(Q[i_st]%10>0 && a[Q[i_st]-1]==0)
            {
                fl=1;
                if(Q[i_st]%10+1<10 && a[Q[i_st]+1]==2)
                    fl=0;
                if(Q[i_st]%10+2<10 && a[Q[i_st]+2]==2)
                    fl=0;
                if((Q[i_st]/10)%10+1<10 && a[Q[i_st]+9]==2)
                    fl=0;
                if((Q[i_st]/10)%10+2<10 && a[Q[i_st]+19]==2)
                    fl=0;
                if((Q[i_st]/10)%10+3<10 && a[Q[i_st]+29]==2)
                    fl=0;
                if((Q[i_st]/100)%10+1<10 && a[Q[i_st]+99]==2)
                    fl=0;
                if((Q[i_st]/100)%10+2<10 && a[Q[i_st]+199]==2)
                    fl=0;
                if((Q[i_st]/100)%10+3<10 && a[Q[i_st]+299]==2)
                    fl=0;
                if(fl==1)
                {
                    a[Q[i_st]-1]=2;
                    Q[i_end++]=Q[i_st]-1;
                }
                else
                {
                    if(a[Q[i_st]-1]==0)
                    {
                        a[Q[i_st]-1]=1;
                        Q[i_end++]=Q[i_st]-1;
                    }
                }
            }
            if((Q[i_st]/10)%10>0 && a[((Q[i_st]/10)-1)*10+Q[i_st]%10]==0)
            {
                fl=1;
                if(Q[i_st]%10+1<10 && a[Q[i_st]-9]==2)
                    fl=0;
                if(Q[i_st]%10+2<10 && a[Q[i_st]-8]==2)
                    fl=0;
                if(Q[i_st]%10+3<10 && a[Q[i_st]-7]==2)
                    fl=0;
                if((Q[i_st]/10)%10+1<10 && a[Q[i_st]+10]==2)
                    fl=0;
                if((Q[i_st]/10)%10+2<10 && a[Q[i_st]+20]==2)
                    fl=0;
                if((Q[i_st]/100)%10+1<10 && a[Q[i_st]+90]==2)
                    fl=0;
                if((Q[i_st]/100)%10+2<10 && a[Q[i_st]+190]==2)
                    fl=0;
                if((Q[i_st]/100)%10+3<10 && a[Q[i_st]+290]==2)
                    fl=0;
                if(fl==1)
                {
                    a[((Q[i_st]/10)-1)*10+Q[i_st]%10]=2;
                    Q[i_end++]=((Q[i_st]/10)-1)*10+Q[i_st]%10;
                }
                else
                {
                    if(a[((Q[i_st]/10)-1)*10+Q[i_st]%10]==0)
                    {
                        a[((Q[i_st]/10)-1)*10+Q[i_st]%10]=1;
                        Q[i_end++]=((Q[i_st]/10)-1)*10+Q[i_st]%10;
                    }
                }
            }
            if((Q[i_st]/100)%10>0 && a[((Q[i_st]/100)-1)*100+Q[i_st]%100]==0)
            {
                fl=1;
                if(Q[i_st]%10+1<10 && a[Q[i_st]-99]==2)
                    fl=0;
                if(Q[i_st]%10+2<10 && a[Q[i_st]-98]==2)
                    fl=0;
                if(Q[i_st]%10+3<10 && a[Q[i_st]-97]==2)
                    fl=0;
                if((Q[i_st]/10)%10+1<10 && a[Q[i_st]-90]==2)
                    fl=0;
                if((Q[i_st]/10)%10+2<10 && a[Q[i_st]-80]==2)
                    fl=0;
                if((Q[i_st]/10)%10+3<10 && a[Q[i_st]-70]==2)
                    fl=0;
                if((Q[i_st]/100)%10+1<10 && a[Q[i_st]+100]==2)
                    fl=0;
                if((Q[i_st]/100)%10+2<10 && a[Q[i_st]+200]==2)
                    fl=0;
                if(fl==1)
                {
                    a[((Q[i_st]/100)-1)*100+Q[i_st]%100]=2;
                    Q[i_end++]=((Q[i_st]/100)-1)*100+Q[i_st]%100;
                }
                else
                {
                    if(a[((Q[i_st]/100)-1)*100+Q[i_st]%100]==0)
                    {
                        a[((Q[i_st]/100)-1)*100+Q[i_st]%100]=1;
                        Q[i_end++]=((Q[i_st]/100)-1)*100+Q[i_st]%100;
                    }
                }
            }
        }
        else
        {
            if(Q[i_st]%10>0 && a[Q[i_st]-1]==0)
            {
                a[Q[i_st]-1]=1;
                Q[i_end++]=Q[i_st]-1;
            }
            if((Q[i_st]/10)%10>0 && a[((Q[i_st]/10)-1)*10+Q[i_st]%10]==0)
            {
                a[((Q[i_st]/10)-1)*10+Q[i_st]%10]=1;
                Q[i_end++]=((Q[i_st]/10)-1)*10+Q[i_st]%10;
            }
            if((Q[i_st]/100)%10>0 && a[((Q[i_st]/100)-1)*100+Q[i_st]%100]==0)
            {
                a[((Q[i_st]/100)-1)*100+Q[i_st]%100]=1;
                Q[i_end++]=((Q[i_st]/100)-1)*100+Q[i_st]%100;
            }
            if(Q[i_st]%10>1 && a[Q[i_st]-2]==0)
            {
                a[Q[i_st]-2]=1;
                Q[i_end++]=Q[i_st]-2;
            }
            if((Q[i_st]/10)%10>1 && a[((Q[i_st]/10)-2)*10+Q[i_st]%10]==0)
            {
                a[((Q[i_st]/10)-2)*10+Q[i_st]%10]=1;
                Q[i_end++]=((Q[i_st]/10)-2)*10+Q[i_st]%10;
            }
            if((Q[i_st]/100)%10>1 && a[((Q[i_st]/100)-2)*100+Q[i_st]%100]==0)
            {
                a[((Q[i_st]/100)-2)*100+Q[i_st]%100]=1;
                Q[i_end++]=((Q[i_st]/100)-2)*100+Q[i_st]%100;
            }
            if(Q[i_st]%10>2 && a[Q[i_st]-3]==0)
            {
                a[Q[i_st]-3]=1;
                Q[i_end++]=Q[i_st]-3;
            }
            if((Q[i_st]/10)%10>2 && a[((Q[i_st]/10)-3)*10+Q[i_st]%10]==0)
            {
                a[((Q[i_st]/10)-3)*10+Q[i_st]%10]=1;
                Q[i_end++]=((Q[i_st]/10)-3)*10+Q[i_st]%10;
            }
            if((Q[i_st]/100)%10>2 && a[((Q[i_st]/100)-3)*100+Q[i_st]%100]==0)
            {
                a[((Q[i_st]/100)-3)*100+Q[i_st]%100]=1;
                Q[i_end++]=((Q[i_st]/100)-3)*100+Q[i_st]%100;
            }           
        }
        i_st++;
    }
 
  
    FILE *file;
    fl=1;
    if ((file = fopen("output.txt","w")) == NULL)
       printf("Файл невозможно открыть или создать\n");
    else{
       for(int i=0; i<5;i++)
    {
        if(n%10<9 && a[n+1]==2)
        {
            if(fl==1)
            {
                fwrite(&"First win\n", sizeof(char), 1, file);
            }
            fwrite(&n+1, sizeof(int), 1, file);
            fl=0;
        }
        if(n%10<8 && a[n+2]==2)
        {
            if(fl==1)
            {
                fwrite(&"First win\n", sizeof(char), 1, file);
            }
            fwrite(&n+2, sizeof(int), 1, file);
            fl=0;
        }
        if(n%10<7 && a[n+3]==2)
        {
            if(fl==1)
            {
                fwrite(&"First win\n", sizeof(char), 1, file);
            }
            fwrite(&n+3, sizeof(int), 1, file);
            fl=0;
        }
        if((n/10)%10<9 && a[n+10]==2)
        {
            if(fl==1)
            {
                fwrite(&"First win\n", sizeof(char), 1, file);
            }
            fwrite(&n+10, sizeof(int), 1, file);
            fl=0;
        }
        if((n/10)%10<8 && a[n+20]==2)
        {
            if(fl==1)
            {
                fwrite(&"First win\n", sizeof(char), 1, file);
            }
            fwrite(&n+20, sizeof(int), 1, file);
            fl=0;
        }
        if((n/10)%10<7 && a[n+30]==2)
        {
            if(fl==1)
            {
                fwrite(&"First win\n", sizeof(char), 1, file);
            }
            fwrite(&n+30, sizeof(int), 1, file);
            fl=0;
        }
        if((n/100)<9 && a[n+100]==2)
        {
            if(fl==1)
            {
                fwrite(&"First win\n", sizeof(char), 1, file);
            }
            fwrite(&n+100, sizeof(int), 1, file);
            fl=0;
        }
        if((n/100)<8 && a[n+200]==2)
        {
            if(fl==1)
            {
                fwrite(&"First win\n", sizeof(char), 1, file);
            }
            fwrite(&n+200, sizeof(int), 1, file);
            fl=0;
        }
        if((n/100)<7 && a[n+300]==2)
        {
            if(fl==1)
            {
                fwrite(&"First win\n", sizeof(char), 1, file);
            }
            fwrite(&n+300, sizeof(int), 1, file);
            fl=0;
        }
        if(fl==1)
            fwrite(&"Second win\n", sizeof(char), 1, file);
 
       }
    }
 
    fclose(file);
    fclose(file);
 
    return 0;
}
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
06.05.2012, 14:13     Для заданного n необходимо определить, может ли выиграть игрок, делающий первый ход, при наилучших последующих ходах противника #12
Цитата Сообщение от vladius Посмотреть сообщение
Мне нужно было, что бы чисдо n считывалось из файла(input.txt) и записывалась в файл(output.txt).
Я вот тут сделал, только оно всё равно просит ввести число n с консоли, что делать?
Немного поправить код. Вот так сдавайте:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
#include <stdio.h>
 
int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    int a[1000]={0}, Q[1000], i_st=0, i_end=1, n, fl;
    scanf("%d", &n);
    a[999]=1; Q[0]=999;
    while(i_st<i_end)
    {
        if(a[Q[i_st]]==1)
        {
            if(Q[i_st]%10>0 && a[Q[i_st]-1]==0)
            {
                fl=1;
                if(Q[i_st]%10+1<10 && a[Q[i_st]+1]==2)
                    fl=0;
                if(Q[i_st]%10+2<10 && a[Q[i_st]+2]==2)
                    fl=0;
                if((Q[i_st]/10)%10+1<10 && a[Q[i_st]+9]==2)
                    fl=0;
                if((Q[i_st]/10)%10+2<10 && a[Q[i_st]+19]==2)
                    fl=0;
                if((Q[i_st]/10)%10+3<10 && a[Q[i_st]+29]==2)
                    fl=0;
                if((Q[i_st]/100)%10+1<10 && a[Q[i_st]+99]==2)
                    fl=0;
                if((Q[i_st]/100)%10+2<10 && a[Q[i_st]+199]==2)
                    fl=0;
                if((Q[i_st]/100)%10+3<10 && a[Q[i_st]+299]==2)
                    fl=0;
                if(fl==1)
                {
                    a[Q[i_st]-1]=2;
                    Q[i_end++]=Q[i_st]-1;
                }
                else
                {
                    if(a[Q[i_st]-1]==0)
                    {
                        a[Q[i_st]-1]=1;
                        Q[i_end++]=Q[i_st]-1;
                    }
                }
            }
            if((Q[i_st]/10)%10>0 && a[((Q[i_st]/10)-1)*10+Q[i_st]%10]==0)
            {
                fl=1;
                if(Q[i_st]%10+1<10 && a[Q[i_st]-9]==2)
                    fl=0;
                if(Q[i_st]%10+2<10 && a[Q[i_st]-8]==2)
                    fl=0;
                if(Q[i_st]%10+3<10 && a[Q[i_st]-7]==2)
                    fl=0;
                if((Q[i_st]/10)%10+1<10 && a[Q[i_st]+10]==2)
                    fl=0;
                if((Q[i_st]/10)%10+2<10 && a[Q[i_st]+20]==2)
                    fl=0;
                if((Q[i_st]/100)%10+1<10 && a[Q[i_st]+90]==2)
                    fl=0;
                if((Q[i_st]/100)%10+2<10 && a[Q[i_st]+190]==2)
                    fl=0;
                if((Q[i_st]/100)%10+3<10 && a[Q[i_st]+290]==2)
                    fl=0;
                if(fl==1)
                {
                    a[((Q[i_st]/10)-1)*10+Q[i_st]%10]=2;
                    Q[i_end++]=((Q[i_st]/10)-1)*10+Q[i_st]%10;
                }
                else
                {
                    if(a[((Q[i_st]/10)-1)*10+Q[i_st]%10]==0)
                    {
                        a[((Q[i_st]/10)-1)*10+Q[i_st]%10]=1;
                        Q[i_end++]=((Q[i_st]/10)-1)*10+Q[i_st]%10;
                    }
                }
            }
            if((Q[i_st]/100)%10>0 && a[((Q[i_st]/100)-1)*100+Q[i_st]%100]==0)
            {
                fl=1;
                if(Q[i_st]%10+1<10 && a[Q[i_st]-99]==2)
                    fl=0;
                if(Q[i_st]%10+2<10 && a[Q[i_st]-98]==2)
                    fl=0;
                if(Q[i_st]%10+3<10 && a[Q[i_st]-97]==2)
                    fl=0;
                if((Q[i_st]/10)%10+1<10 && a[Q[i_st]-90]==2)
                    fl=0;
                if((Q[i_st]/10)%10+2<10 && a[Q[i_st]-80]==2)
                    fl=0;
                if((Q[i_st]/10)%10+3<10 && a[Q[i_st]-70]==2)
                    fl=0;
                if((Q[i_st]/100)%10+1<10 && a[Q[i_st]+100]==2)
                    fl=0;
                if((Q[i_st]/100)%10+2<10 && a[Q[i_st]+200]==2)
                    fl=0;
                if(fl==1)
                {
                    a[((Q[i_st]/100)-1)*100+Q[i_st]%100]=2;
                    Q[i_end++]=((Q[i_st]/100)-1)*100+Q[i_st]%100;
                }
                else
                {
                    if(a[((Q[i_st]/100)-1)*100+Q[i_st]%100]==0)
                    {
                        a[((Q[i_st]/100)-1)*100+Q[i_st]%100]=1;
                        Q[i_end++]=((Q[i_st]/100)-1)*100+Q[i_st]%100;
                    }
                }
            }
        }
        else
        {
            if(Q[i_st]%10>0 && a[Q[i_st]-1]==0)
            {
                a[Q[i_st]-1]=1;
                Q[i_end++]=Q[i_st]-1;
            }
            if((Q[i_st]/10)%10>0 && a[((Q[i_st]/10)-1)*10+Q[i_st]%10]==0)
            {
                a[((Q[i_st]/10)-1)*10+Q[i_st]%10]=1;
                Q[i_end++]=((Q[i_st]/10)-1)*10+Q[i_st]%10;
            }
            if((Q[i_st]/100)%10>0 && a[((Q[i_st]/100)-1)*100+Q[i_st]%100]==0)
            {
                a[((Q[i_st]/100)-1)*100+Q[i_st]%100]=1;
                Q[i_end++]=((Q[i_st]/100)-1)*100+Q[i_st]%100;
            }
            if(Q[i_st]%10>1 && a[Q[i_st]-2]==0)
            {
                a[Q[i_st]-2]=1;
                Q[i_end++]=Q[i_st]-2;
            }
            if((Q[i_st]/10)%10>1 && a[((Q[i_st]/10)-2)*10+Q[i_st]%10]==0)
            {
                a[((Q[i_st]/10)-2)*10+Q[i_st]%10]=1;
                Q[i_end++]=((Q[i_st]/10)-2)*10+Q[i_st]%10;
            }
            if((Q[i_st]/100)%10>1 && a[((Q[i_st]/100)-2)*100+Q[i_st]%100]==0)
            {
                a[((Q[i_st]/100)-2)*100+Q[i_st]%100]=1;
                Q[i_end++]=((Q[i_st]/100)-2)*100+Q[i_st]%100;
            }
            if(Q[i_st]%10>2 && a[Q[i_st]-3]==0)
            {
                a[Q[i_st]-3]=1;
                Q[i_end++]=Q[i_st]-3;
            }
            if((Q[i_st]/10)%10>2 && a[((Q[i_st]/10)-3)*10+Q[i_st]%10]==0)
            {
                a[((Q[i_st]/10)-3)*10+Q[i_st]%10]=1;
                Q[i_end++]=((Q[i_st]/10)-3)*10+Q[i_st]%10;
            }
            if((Q[i_st]/100)%10>2 && a[((Q[i_st]/100)-3)*100+Q[i_st]%100]==0)
            {
                a[((Q[i_st]/100)-3)*100+Q[i_st]%100]=1;
                Q[i_end++]=((Q[i_st]/100)-3)*100+Q[i_st]%100;
            }           
        }
        i_st++;
    }
    fl=1;
    if(n%10<9 && a[n+1]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        printf("%d ", n+1);
        fl=0;
    }
    if(n%10<8 && a[n+2]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        printf("%d ", n+2);
        fl=0;
    }
    if(n%10<7 && a[n+3]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        printf("%d ", n+3);
        fl=0;
    }
    if((n/10)%10<9 && a[n+10]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        printf("%d ", n+10);
        fl=0;
    }
    if((n/10)%10<8 && a[n+20]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        printf("%d ", n+20);
        fl=0;
    }
    if((n/10)%10<7 && a[n+30]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        printf("%d ", n+30);
        fl=0;
    }
    if((n/100)<9 && a[n+100]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        printf("%d ", n+100);
        fl=0;
    }
    if((n/100)<8 && a[n+200]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        printf("%d ", n+200);
        fl=0;
    }
    if((n/100)<7 && a[n+300]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        printf("%d ", n+300);
        fl=0;
    }
    if(fl==1)
        printf("Second win\n");
    return 0;
}
vladius
1 / 1 / 0
Регистрация: 04.05.2012
Сообщений: 26
06.05.2012, 14:40  [ТС]     Для заданного n необходимо определить, может ли выиграть игрок, делающий первый ход, при наилучших последующих ходах противника #13
Я отправил на тесты пишет что: Неверный ответ и Strings not matched at line 1 (код не прошёл 1-ый тест)

Добавлено через 2 минуты
Неверный ответ:

1. В скобках указан номер первого из неправильных тестов. Система проверяет посланное решение на всех тестах.

2. Тест является не правильным, если некоторые из чисел в файле не совпадают. Количество строк в выходном файле совпадает (в противном случае система выдавала бы ошибку представления).

3. Необходимо учитывать тот факт, что система проверят выходной файл посимвольно, т. е. если в строке выводится некоторое число, а затем идет переход в начало следующей строки, то не должно быть незначащих пробелов после выводимого числа. После вывода информации в последней строке файла, можно остаться на этой строке, но можно и перейти в начало следующей строки.

4. Необходимо учитывать тот факт, что входной файл может содержать незначащие пробелы (в том числе и после последнего числа файла).

5. Проверить имя выходного файла.

6. Написать в начале программы на C++: using namespaсe std;

7. Если в программе переменная локальная (в main или в процедуре), то перед ее использованием в программе надо переменную инициализировать (например, присвоить значение = 0). Глобальные переменные инициализируются по умолчанию. Но если вывод оформлен так:
file *out=fopen(“output.txt”,”wt”);
fprintf(out,”ld\n”, res);
fclose(out);
а переменная res является локальной и предварительно не инициализирована, то тоже работает!
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
06.05.2012, 14:55     Для заданного n необходимо определить, может ли выиграть игрок, делающий первый ход, при наилучших последующих ходах противника #14
vladius, строгая у Вас система.

Цитата Сообщение от vladius Посмотреть сообщение
3. Необходимо учитывать тот факт, что система проверят выходной файл посимвольно, т. е. если в строке выводится некоторое число, а затем идет переход в начало следующей строки, то не должно быть незначащих пробелов после выводимого числа. После вывода информации в последней строке файла, можно остаться на этой строке, но можно и перейти в начало следующей строки.
можете дать ссылку на тестирующую систему?
vladius
1 / 1 / 0
Регистрация: 04.05.2012
Сообщений: 26
06.05.2012, 15:38  [ТС]     Для заданного n необходимо определить, может ли выиграть игрок, делающий первый ход, при наилучших последующих ходах противника #15
http://acm-test.bsu.by/courses/edito...lutionForm.cmd вот ссылка

Добавлено через 3 минуты
ТУт значт так:
1) Слева жмём -отправить решение
2) Задание ставим 14.Игра.[6]
!3)! Исходный файл (max 1Mb) ----- нужно скидывать только тот файл в котором наш код т.е. с разрешением .с (в нашем случае) и больше ничего.
4) Язык программирования ставим GNU C
5) Нажимаем отправить
6) Слева по-середине нажимаем Решения
7) Автора выбираем Киселев Владислав(кем я и являюсь)
8) Нажимаем Применить (справа)

Добавлено через 2 минуты
И система отпишет результат в столбце *Статус

Добавлено через 1 минуту
программа должна пройти все тесты

Добавлено через 14 минут
Ошибки тестирования

(Внимание! Системе посылаются только исходные файлы, а сама посылаемая программа должна состоять только из одного файла: *.dpr, *.cpp, *.java, *.pas и т. д.)

Ошибка времени выполнения:

1. Деление на 0.

2. Выход за границы допустимой области.

3. Переполнение стека.

4. Ошибка ввода-вывода (попытка открыть не существующий входной файл). Проверить правильность имени входного файла!

5. Функция main в программе на С/С++ должна возвращать тип int и завершаться с помощью инструкции “return 0;”.

6. В скобках указывается код ошибки времени выполнения.



Ошибка тестирования:

1. Выбран не верный компилятор.

2. Ошибка в работе системы (обратиться к администратору системы).



Ошибка представления:

1. Не сформирован выходной файл с требуемым именем либо выходной файл вообще не сформирован. Проверить имя выходного файла!

2. Не правильный формат выходного файла (например, больше строк, чем надо и т. д.).

3. Большие – маленькие буквы.




Неверный ответ:

1. В скобках указан номер первого из неправильных тестов. Система проверяет посланное решение на всех тестах.

2. Тест является не правильным, если некоторые из чисел в файле не совпадают. Количество строк в выходном файле совпадает (в противном случае система выдавала бы ошибку представления).

3. Необходимо учитывать тот факт, что система проверят выходной файл посимвольно, т. е. если в строке выводится некоторое число, а затем идет переход в начало следующей строки, то не должно быть незначащих пробелов после выводимого числа. После вывода информации в последней строке файла, можно остаться на этой строке, но можно и перейти в начало следующей строки.

4. Необходимо учитывать тот факт, что входной файл может содержать незначащие пробелы (в том числе и после последнего числа файла).

5. Проверить имя выходного файла.

6. Написать в начале программы на C++: using namespaсe std;

7. Если в программе переменная локальная (в main или в процедуре), то перед ее использованием в программе надо переменную инициализировать (например, присвоить значение = 0). Глобальные переменные инициализируются по умолчанию. Но если вывод оформлен так:
file *out=fopen(“output.txt”,”wt”);
fprintf(out,”ld\n”, res);
fclose(out);
а переменная res является локальной и предварительно не инициализирована, то тоже работает!















Нарушен предел времени (n):

1. В скобках указывается номер первого теста, для которого нарушен предел времени.

2. У каждого из тестов есть предельное время тестирования. Если тестируемая программа выходит на тесте за границы лимитного времени, то система прекращает тестирование на данном тесте, выдает для данного теста соответствующее сообщение о нарушении предела времени, продолжается тестирование программы на последующих тестах.

3. Данная ошибка может появляться в ситуации, когда данные считаны из входного файла с ошибочным именем. Проверить имя входного файла!

4. Проверить, нет ли в программе операторов типа readln;.

5. Для ускорения ввода-вывода на JAVA:

// http://stackoverflow.com/questions/2...rformance-java
BufferedReader br = new BufferedReader(new FileReader(new File("in.txt")));
String line = br.readLine();
while(line != null) {
tree.add(Integer.parseInt(line));
line = br.readLine();
}



// http://www.frequal.com/java/PrintStream.html
ps = new PrintStream(new BufferedOutputStream(new FileOutputStream("out.txt")), false);

6. Для ускорения ввода-вывода на С++ можно использовать стандартные функции ввода-вывода на С:

FILE *in = fopen("in.txt","r");
int key;
while (fscanf(in,"%d",&key) != EOF)
tree->add(key);

fclose(in);


FILE *out = fopen("out.txt","w");
fprintf(out,"%d\n",key);
fclose(out);

Ошибка компиляции:

1. Для программ *.java: класс должен называться Solution и находится в пакете по умолчанию.

2. Системе посылаются исходные файлы, а сама посылаемая программа должна состоять только из одного файла: *.dpr, *.cpp, *.java, *.pas и т. д.)

3. Имя файла не должно содержать русские буквы.

4. Программа на JAVA не должна содержать комментарии на русском языке.












Замечания по оформлению решений
Общее
Исходный текст Вашей программы должен целиком находиться в одном файле. Для программ на Delphi 7.0 следует отправлять на проверку файл с расширением dpr, для программ на Borland Pascal 7.0 – файл с расширением pas, a для Borland C++ 3.1, Borland C++ 5.02 и Microsoft Visual C++ файл с расширением cpp. Файл с решением на Java должен называться Solution.java
Решения на С/С++
Функция main в программе на С/С++ должна возвращать тип int и завершаться с помощью инструкции “return 0;”. Например,
...
int main() {
...
return 0;
}
Решения на Microsoft Visual C++
В дополнение к предыдущим пунктам действует ограничение на используемые библиотеки. Запрещается использовать библиотеку MFC или делать Win32 API вызовы. Библиотеку STL использовать можно. Обратите внимание, что решение должно полностью содержаться в одном файле. Например, этот файл не должен подключать файл stdafx.h, который при некоторых условиях генерируется мастером Visual Studio на этапе создания нового проекта.
Решения на Java
При написании решения на Java следует придерживаться следующих правил.
1. Решение должно содержаться в файле с именем Solution.java.
2. Класс должен находится в пакете по умолчанию, т.е. не следует использовать директиву package.
3. В файле должен находится единственный класс Solution. Обратите внимание на заглавную букву в названии класса. Допускается использование вложенных классов, объявленных внутри класса Solution
4. Класс должен содержать статический метод main

Каркас решения на Java приведен ниже.

import java.io.*;

public class Solution {
public static void main(String args[]) {
// ...
}
}
Решения на С#
1. Не забывайте, что используется компилятор из .NET 1.1. Поэтому, например, нельзя использовать generics и другие нововведения из .NET 2.0.
2. При компиляции не подключаются никакие сборки, кроме mscorlib.dll (она подключается по умолчанию). Поэтому, если вы хотите использовать классы из библиотеки классов .NET, убедитесь, что они находятся в этой сборке. Иначе придется писать свой аналог. Например, класс Point из .NET использовать в своих программах нельзя, т.к. он находится в System.Drawing.dll. Информацию о том, в какой сборке находится нужный класс, можно найти в MSDN.
3. Как указано выше, исходный код должен находиться в одном файле. Поэтому все классы, если они создаются в программе, нужно объявлять в одном и том же файле, например:
using System;
namespace MySolution
{
class MyClass { ... }
class Main
{
static void main(String args[])
{
}
}
}
Компиляторы
Для компиляции представленных на проверку исходных текстов используются следующие компиляторы командной строки и их параметры:
Язык Среда программирования Командная строка
Pascal Free Pascal 2.0 (режим win32) fpc.exe –O3 –Xs –Sc !.!
Borland Delphi 7 dcc32.exe !.!
C++ Borland C++ 5.02 for Windows bcc32.exe !.!
(stack commit size 500000)
Microsoft Visual C++ 6.0 cl.exe !.! –GX /X /link
Microsoft Visual C++ 8.0 (VS2005) cl.exe !.! /EHsc
GNU C Eclipse 3.1.2, CDT 3.0.2, GCC 3.2 g++.exe –lm –o filename.exe !.!
Java Eclipse 3.1.2, JDK 1.5 javac.exe !
C# Компилятор командной строки
С# v1.1 csc.exe /target:exe /debug- /optimize+ !.!
Вместо символов !.! будет подставлено имя и расширение компилируемого файла.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
06.05.2012, 16:00     Для заданного n необходимо определить, может ли выиграть игрок, делающий первый ход, при наилучших последующих ходах противника #16
в общем не пускает меня Ваша система дальше регистрации - пишет что прав мало.
Пробуйте вот этот код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
#include <stdio.h>
 
int main()
{
 
    int a[1000]={0}, Q[1000], i_st=0, i_end=1, n, fl, mas_res[9], N_res=0;
    scanf("%d", &n);
    a[999]=1; Q[0]=999;
    while(i_st<i_end)
    {
        if(a[Q[i_st]]==1)
        {
            if(Q[i_st]%10>0 && a[Q[i_st]-1]==0)
            {
                fl=1;
                if(Q[i_st]%10+1<10 && a[Q[i_st]+1]==2)
                    fl=0;
                if(Q[i_st]%10+2<10 && a[Q[i_st]+2]==2)
                    fl=0;
                if((Q[i_st]/10)%10+1<10 && a[Q[i_st]+9]==2)
                    fl=0;
                if((Q[i_st]/10)%10+2<10 && a[Q[i_st]+19]==2)
                    fl=0;
                if((Q[i_st]/10)%10+3<10 && a[Q[i_st]+29]==2)
                    fl=0;
                if((Q[i_st]/100)%10+1<10 && a[Q[i_st]+99]==2)
                    fl=0;
                if((Q[i_st]/100)%10+2<10 && a[Q[i_st]+199]==2)
                    fl=0;
                if((Q[i_st]/100)%10+3<10 && a[Q[i_st]+299]==2)
                    fl=0;
                if(fl==1)
                {
                    a[Q[i_st]-1]=2;
                    Q[i_end++]=Q[i_st]-1;
                }
                else
                {
                    if(a[Q[i_st]-1]==0)
                    {
                        a[Q[i_st]-1]=1;
                        Q[i_end++]=Q[i_st]-1;
                    }
                }
            }
            if((Q[i_st]/10)%10>0 && a[((Q[i_st]/10)-1)*10+Q[i_st]%10]==0)
            {
                fl=1;
                if(Q[i_st]%10+1<10 && a[Q[i_st]-9]==2)
                    fl=0;
                if(Q[i_st]%10+2<10 && a[Q[i_st]-8]==2)
                    fl=0;
                if(Q[i_st]%10+3<10 && a[Q[i_st]-7]==2)
                    fl=0;
                if((Q[i_st]/10)%10+1<10 && a[Q[i_st]+10]==2)
                    fl=0;
                if((Q[i_st]/10)%10+2<10 && a[Q[i_st]+20]==2)
                    fl=0;
                if((Q[i_st]/100)%10+1<10 && a[Q[i_st]+90]==2)
                    fl=0;
                if((Q[i_st]/100)%10+2<10 && a[Q[i_st]+190]==2)
                    fl=0;
                if((Q[i_st]/100)%10+3<10 && a[Q[i_st]+290]==2)
                    fl=0;
                if(fl==1)
                {
                    a[((Q[i_st]/10)-1)*10+Q[i_st]%10]=2;
                    Q[i_end++]=((Q[i_st]/10)-1)*10+Q[i_st]%10;
                }
                else
                {
                    if(a[((Q[i_st]/10)-1)*10+Q[i_st]%10]==0)
                    {
                        a[((Q[i_st]/10)-1)*10+Q[i_st]%10]=1;
                        Q[i_end++]=((Q[i_st]/10)-1)*10+Q[i_st]%10;
                    }
                }
            }
            if((Q[i_st]/100)%10>0 && a[((Q[i_st]/100)-1)*100+Q[i_st]%100]==0)
            {
                fl=1;
                if(Q[i_st]%10+1<10 && a[Q[i_st]-99]==2)
                    fl=0;
                if(Q[i_st]%10+2<10 && a[Q[i_st]-98]==2)
                    fl=0;
                if(Q[i_st]%10+3<10 && a[Q[i_st]-97]==2)
                    fl=0;
                if((Q[i_st]/10)%10+1<10 && a[Q[i_st]-90]==2)
                    fl=0;
                if((Q[i_st]/10)%10+2<10 && a[Q[i_st]-80]==2)
                    fl=0;
                if((Q[i_st]/10)%10+3<10 && a[Q[i_st]-70]==2)
                    fl=0;
                if((Q[i_st]/100)%10+1<10 && a[Q[i_st]+100]==2)
                    fl=0;
                if((Q[i_st]/100)%10+2<10 && a[Q[i_st]+200]==2)
                    fl=0;
                if(fl==1)
                {
                    a[((Q[i_st]/100)-1)*100+Q[i_st]%100]=2;
                    Q[i_end++]=((Q[i_st]/100)-1)*100+Q[i_st]%100;
                }
                else
                {
                    if(a[((Q[i_st]/100)-1)*100+Q[i_st]%100]==0)
                    {
                        a[((Q[i_st]/100)-1)*100+Q[i_st]%100]=1;
                        Q[i_end++]=((Q[i_st]/100)-1)*100+Q[i_st]%100;
                    }
                }
            }
        }
        else
        {
            if(Q[i_st]%10>0 && a[Q[i_st]-1]==0)
            {
                a[Q[i_st]-1]=1;
                Q[i_end++]=Q[i_st]-1;
            }
            if((Q[i_st]/10)%10>0 && a[((Q[i_st]/10)-1)*10+Q[i_st]%10]==0)
            {
                a[((Q[i_st]/10)-1)*10+Q[i_st]%10]=1;
                Q[i_end++]=((Q[i_st]/10)-1)*10+Q[i_st]%10;
            }
            if((Q[i_st]/100)%10>0 && a[((Q[i_st]/100)-1)*100+Q[i_st]%100]==0)
            {
                a[((Q[i_st]/100)-1)*100+Q[i_st]%100]=1;
                Q[i_end++]=((Q[i_st]/100)-1)*100+Q[i_st]%100;
            }
            if(Q[i_st]%10>1 && a[Q[i_st]-2]==0)
            {
                a[Q[i_st]-2]=1;
                Q[i_end++]=Q[i_st]-2;
            }
            if((Q[i_st]/10)%10>1 && a[((Q[i_st]/10)-2)*10+Q[i_st]%10]==0)
            {
                a[((Q[i_st]/10)-2)*10+Q[i_st]%10]=1;
                Q[i_end++]=((Q[i_st]/10)-2)*10+Q[i_st]%10;
            }
            if((Q[i_st]/100)%10>1 && a[((Q[i_st]/100)-2)*100+Q[i_st]%100]==0)
            {
                a[((Q[i_st]/100)-2)*100+Q[i_st]%100]=1;
                Q[i_end++]=((Q[i_st]/100)-2)*100+Q[i_st]%100;
            }
            if(Q[i_st]%10>2 && a[Q[i_st]-3]==0)
            {
                a[Q[i_st]-3]=1;
                Q[i_end++]=Q[i_st]-3;
            }
            if((Q[i_st]/10)%10>2 && a[((Q[i_st]/10)-3)*10+Q[i_st]%10]==0)
            {
                a[((Q[i_st]/10)-3)*10+Q[i_st]%10]=1;
                Q[i_end++]=((Q[i_st]/10)-3)*10+Q[i_st]%10;
            }
            if((Q[i_st]/100)%10>2 && a[((Q[i_st]/100)-3)*100+Q[i_st]%100]==0)
            {
                a[((Q[i_st]/100)-3)*100+Q[i_st]%100]=1;
                Q[i_end++]=((Q[i_st]/100)-3)*100+Q[i_st]%100;
            }           
        }
        i_st++;
    }
    fl=1;
    if(n%10<9 && a[n+1]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        mas_res[N_res++]=n+1;
        fl=0;
    }
    if(n%10<8 && a[n+2]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        mas_res[N_res++]=n+2;        
        fl=0;
    }
    if(n%10<7 && a[n+3]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        mas_res[N_res++]=n+3;       
        fl=0;
    }
    if((n/10)%10<9 && a[n+10]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        mas_res[N_res++]=n+10;         
        fl=0;
    }
    if((n/10)%10<8 && a[n+20]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }        
        mas_res[N_res++]=n+20;  
        fl=0;
    }
    if((n/10)%10<7 && a[n+30]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        mas_res[N_res++]=n+30;         
        fl=0;
    }
    if((n/100)<9 && a[n+100]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }        
        mas_res[N_res++]=n+100; 
        fl=0;
    }
    if((n/100)<8 && a[n+200]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        mas_res[N_res++]=n+200;         
        fl=0;
    }
    if((n/100)<7 && a[n+300]==2)
    {
        if(fl==1)
        {
            printf("First win\n");
        }
        mas_res[N_res++]=n+300;         
        fl=0;
    }
    if(fl==1)
        printf("Second win\n");
    else
    {
        for(int i=0; i<N_res-1; i++)
            printf("%d ", mas_res[i]);
        printf("%d\n", mas_res[N_res-1]);
    }
 
    return 0;
}
Компиляторами:
Microsoft Visual C++ 6.0 cl.exe !.! –GX /X /link
Microsoft Visual C++ 8.0 (VS2005) cl.exe !.! /EHsc
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2012, 22:12     Для заданного n необходимо определить, может ли выиграть игрок, делающий первый ход, при наилучших последующих ходах противника
Еще ссылки по теме:

Какие средства ООП можно применить для описания Игрока и Противника? C++
Сохранение массива для последующих запусков программы C++
C++ Определить может ли пешка выполнить ход

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
vladius
1 / 1 / 0
Регистрация: 04.05.2012
Сообщений: 26
06.05.2012, 22:12  [ТС]     Для заданного n необходимо определить, может ли выиграть игрок, делающий первый ход, при наилучших последующих ходах противника #17
Хорошо проверю

Добавлено через 24 минуты
Пишет, что Нарушен предел времени

Добавлено через 4 минуты
А зачем тут *printf??? Нам же надо записать кто выйграл в файл output.txt
Yandex
Объявления
06.05.2012, 22:12     Для заданного n необходимо определить, может ли выиграть игрок, делающий первый ход, при наилучших последующих ходах противника
Ответ Создать тему
Опции темы

Текущее время: 13:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru