容易忽略除数不能为零这个条件! /* ID: gengjia1 LANG: C TASK: gift1 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> int fine_name(char *tname, char pname[10][15], int NP) { int i; for(i = 0; i < NP; i++) { if (strcmp(pname[i], tname) == 0) { return i; } } return i; //assert(0); } int main(void) { FILE *fin = fopen ("gift1.in", "r"); FILE *fout = fopen ("gift1.out", "w"); int NP, i, j, money[10]; char tname[15], pname[10][15]; int amount, n, avg; fscanf (fin, "%d", &NP); assert(NP <= 10); for(i = 0; i < NP; i++) { fscanf(fin, "%s", pname[i]); money[i] = 0; } for(i = 0; i < NP; i++) { fscanf(fin, "%s %d %d", tname, &amount, &n); if(n != 0) avg = amount/n; /*除数不能为0!!*/ else avg = 0; money[fine_name(tname, pname, NP)] += -(avg * n); for(j = 0; j < n; j++) { fscanf(fin, "%s", tname); money[fine_name(tname, pname, NP)] += avg; } } for(i = 0; i < NP; i++) { fprintf (fout, "%s %d/n", pname[i], money[i]); } fclose(fin); fclose(fout); exit(0); }