完结撒花!!
下学期学过数据结构后会把甲级题目写掉。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
typedef struct
{
int classroom, date, idnum, score, cnt;
char rank, allnum[14];
}information;
int str_to_int(char *str, int N)
{
int result = 0;
for (int i = 0; i < N; i++)
result += (str[i] - '0')*pow(10, N - i - 1);
return result;
}
int cmp_1(const void *a, const void *b)
{
information *aa = (information*)a, *bb = (information*)b;
if (aa->score != bb->score)
return aa->score > bb->score ? -1 : 1;
else return strcmp(aa->allnum, bb->allnum);
}
int cmp_3(const void *a, const void *b)
{
information *aa = (information*)a, *bb = (information*)b;
if (aa->cnt != bb->cnt)
return aa->cnt > bb->cnt ? -1 : 1;
else return aa->classroom > bb->classroom ? 1 : -1;
}
int main()
{
int N, M;
scanf("%d %d", &N, &M);
information *array = (information*)malloc(sizeof(information)*N);
for (int i = 0; i < N; i++)
{
char num[14]; int score;
scanf("%s %d", num, &score);
array[i].rank = num[0], array[i].classroom = str_to_int(num + 1, 3);
array[i].date = str_to_int(num + 4, 6), array[i].idnum = str_to_int(num + 10, 3);
array[i].score = score, strcpy(array[i].allnum, num);
}
qsort(array, N, sizeof(information), cmp_1);
for (int i = 0; i < M; i++)
{
int c;
scanf("%d", &c);
if (c == 1)
{
char rank[2]; int flag = 0;
scanf("%s", rank);
printf("Case %d: 1 %s\n", i + 1, rank);
for(int j=0;j<N;j++)
if (array[j].rank == rank[0])
{
flag = 1;
printf("%s %d\n", array[j].allnum, array[j].score);
}
if (flag == 0)
printf("NA\n");
}
else if (c == 2)
{
int class_room, sum = 0, cnt = 0;
scanf("%d", &class_room);
printf("Case %d: 2 %d\n", i + 1, class_room);
for (int j = 0; j < N; j++)
if (array[j].classroom == class_room)
sum += array[j].score, cnt++;
if(cnt!=0)
printf("%d %d\n", cnt, sum);
else printf("NA\n", class_room);
}
else if (c == 3)
{
int date, flag = 0;
scanf("%d", &date);
printf("Case %d: 3 %06d\n", i + 1, date);
for(int j=0;j<N;j++)
if (array[j].date == date)
{
flag = 1; break;
}
if (flag == 1)
{
information *class_room = (information*)malloc(sizeof(information) * 1000);
for (int j = 0; j < 1000; j++)
class_room[j].cnt = 0,
class_room[j].date = 0,
class_room[j].classroom = 0;
for (int j = 0; j < N; j++)
if (array[j].date == date)
class_room[array[j].classroom].cnt++,
class_room[array[j].classroom].date = date,
class_room[array[j].classroom].classroom = array[j].classroom;
qsort(class_room, 1000, sizeof(information), cmp_3);
for (int j = 0; j < 1000; j++)
if (class_room[j].cnt != 0)
printf("%d %d\n", class_room[j].classroom, class_room[j].cnt);
}
else printf("NA\n");
}
}
return 0;
}