Решения (задачи 180-197)
Задача 182.
// Итоги летней Олимпиады 2000 года #include "stdio.h" #include "conio.h" #include "string.h" idefine NC 10 void main() //количество стран-участниц char *strana[] = {"Австрия\0","Германия\0", "Канада\0","Китай\0","Корея\0", "НорвегияХО","Россия\0", "С311А\0", "Франция\0", "Япония\0" }; // таблица результатов int result[NC+1][5]; // NC+1-ая строка используется как буфер // при сортировке таблицы int i,j; int max; // номер строки таблицы, в которой // количество очков максимально char buf[9]; // используется при сортировке printf("\n*** Сидней 2000 ***\п"); printf("Введите в одной строке количество золотых,\п"); printf("серебряных и бронзовых медалей\п"); // ввод исходных данных for (i = 0; i < NC; i++) printf("%s › ", strana[i]); scanf("%i%i%i", &result[i][0], // золотых &result[i][1], // серебряных Sresult[i][2]); // бронзовых // вычислим общее количество медалей и очков for (i = 0; i < NC; i++) { result[i] [3] = result[i] [0]+result[i] [1]+result[i] [2]; result[i] [4] = result[i][0]*7+result[i] [1]*6+result [i] [2]*5; // сортировка массива в соответствии с количеством очков // методом простого выбора for (i = 0; i < NC-1; //в части таблицы, начиная со строки i, // найти j-ую строку, в которой элемент // result[j][5] максимальный max = i; // пусть это строка с номером i for (j = i+1; j < NC; j++) if (result[j][4] > result[max][4]) max = j; // обменяем 1-ую строку со строкой с номером max //в качестве буфера используем последнюю cpy(buf,strana[i]); strcpy(strana[i],strana[max]); strcpy(strana[max],buf); for (j = 0; j < 5; j++) result [NC] [j] = result [i] [j]; for (j = 0; j < 5; j++) # result[i][j] = result[max][j]; for (j = 0; j < 5; j++) result[max][j] = result[NC][j]; // здесь таблица упорядочена printf("Итоги летней Олимпиады в Сиднее, 2000 г.\п"); printf("%12s%8s%8s%8s%8s%8s","Страна","Золото", "Серебро","Бронза","Всего","Очков"); for (i =0; i < NC; i++) { printf("\n%12s", strana[i]); for (j = 0; j < 5; j++) printf("%8i", result[i][j]); printf("\п Для завершения нажмите Enter"); getch();
Задача 183.
// Игра "Угадай число" #include "stdio.h" #include "conio.h" #include "stdlib.h" #include "time.h" #define N 3 // уровень сложности – количество цифр в числе #define DEBUG // режим отладки void main () char igrok[N]; // комбинация игрока char comp[N]; // комбинация компьютера int a[N]; // a[i] == 1, если i-ая цифра // компьютера совпала с одной из цифр игрока int ugad; // угадано чисел int mesto; //из них на своих местах int i,j; time t t; // индексы printf("Хп Компьютер задумал трехзначное число.\п"); printf("Вы должны его отгадать. \п"); printf("После ввода очередного числа вам будет "); printf("сообщено, сколько цифр угадано, и сколько"); printf("из них находится на своих местах.\п"); printf("После ввода числа нажимайте Enter\n"); srand((unsigned)time(&t)); for (i = 0; i < N; i++) // компьютер "задумывает" число comp[i] = rand() % 10 + 48; // 48 – код символа '0' #ifdef DEBUG printf("Компьютер задумал: "); for (i = 0; i < N; i++) printf("%c", comp[i]); printf("\n"); ttendif do { printf("\пВаш вариант › "); scanf("%s", Sigrok); // массив вводим как строку for (i = 0; i < N; i++) a[i] = 0; // проверим, сколько цифр угадано ugad =0; for (i =0; i < N; i++) // каждую цифру игрока for (j = 0; j < N; j++) // сравним с цифрами // компьютера if ((igrok[i] ==comp[j]) &&! { ugad++; ] = 1; // запретим сравнивать // эту цифру компьютера с оставшимися, // еще не проверенными, цифрами игрока break; } // проверим, сколько на своих местах mesto = 0; for (i =0; i < N; i++) if (igrok[i] == comp[i]) mesto++; printf("Угадано: %i. На своих местах: %i", \ ugad, mesto); } while ((ugad < N) ]| (mesto < N)); printf("\n*** ВЫ УГАДАЛИ ЧИСЛО! ***\п"); printf("\п Для завершения нажмите Enter"); getch ();