From the list of participants, choose the one with the highest score.
#include <stdio.h> #include <math.h> #include <string.h> main(){ struct Rezultat { char fam[20]; char name[15]; int rez; } Rez; int rez1; int rez2; int rez3; struct Rezultat dig[100]; int i,j,n; struct Rezultat tmp; printf("Введите число участников: \n"); scanf("%d",&n); printf("Введите имена и результаты участников: \n"); for (i = 0; i < n; i++ ){ scanf("%s %s %d %d %d",Rez.fam,Rez.name,&rez1,&rez3,&rez3); Rez.rez = rez1 + rez2 + rez3; dig[i] = Rez; Rez.rez = 0; } for (i = n - 1; i >= 0; i-- ){ for (j = 0; j <= i; j++ ){ if (dig[j].rez > dig[i].rez){ tmp = dig[j]; dig[i] = dig[j]; dig[j] = tmp; } } } printf("\n%s %s %d",dig[n - 1].fam,dig[n - 1].name,dig[n - 1].rez); return 0; }
c2.c: 24:21: warning: "rez2" may be used uninitialized in this function [-Wuninitialized] What does this mean? Shl: billiberd is displayed, why? Thanks in advance.
I redid it, maybe not rationally, but if you consider that I know the strings for two days, and with the structures for 3 hours, I think I managed:
#include <stdio.h> #include <math.h> #include <string.h> main(){ struct Rezultat { char fam[20]; char name[15]; int rez; } Rez; int rez1; int rez2; int rez3; struct Rezultat dig[100]; int i,j,n,mm; struct Rezultat tmp; printf("Введите число участников: \n"); scanf("%d",&n); printf("Введите имена и результаты участников: \n"); for (i = 0; i < n; i++ ){ scanf("%s %s %d %d %d",Rez.fam,Rez.name,&rez1,&rez2,&rez3); Rez.rez = rez1 + rez2 + rez3; dig[i] = Rez; } for (i = n - 1; i >= 1; i-- ){ mm = 0; for (j = 0; j <= i; j++ ){ if (dig[j].rez > dig[i].rez){ mm = j; tmp = dig[i]; dig[i] = dig[mm]; dig[mm] = tmp; } } } for (i = 0; i < n - 1 ; i++){ if(dig[n - 1].rez == dig[i].rez ){ printf("\n%s %s\n",dig[i].fam,dig[i].name); } } printf("\n%s %s\n",dig[n - 1].fam,dig[n - 1].name); return 0; }
The most rational thing I can do:
#include <stdio.h> #include <math.h> #include <string.h> main(){ struct Rezultat { char fam[20]; char name[15]; int rez; } Rez; int rez1; int rez2; int rez3,rezmax; struct Rezultat dig[100]; int i,n; printf("Введите число участников: \n"); scanf("%d",&n); printf("Введите имена и результаты участников: \n"); for (i = 0; i < n; i++ ){ scanf("%s %s %d %d %d",Rez.fam,Rez.name,&rez1,&rez2,&rez3); Rez.rez = rez1 + rez2 + rez3; dig[i] = Rez; } rezmax = 0; /*поиск максимального результата*/ for (i = 0; i < n; i++ ){ if(dig[i].rez > rezmax){ rezmax = dig[i].rez; } } /*Поиск результатов,схожих с максимальным*/ for(i = 0 ; i < n ; i++){ if(rezmax == dig[i].rez){ printf("\n%s %s",dig[i].fam,dig[i].name); } } return 0; }
Thanks, avp, 0xFFh!