这是我在USACO上做的第二道题,快被自己蠢哭
首先定义了一个全局结构变量,包含人名和钱。
然后读取总人数,定义相应大小的结构体数组。然后每次读取赠送者、赠送的金额、赠送的人数后,根据这些来读取受赠者并计算受赠者、赠送者的余额。
最后输出。
有一次程序超时是因为没有考虑赠送的金额和受赠者都为0的情况。
代码如下:
LANG: C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct NP{
char name[15];
int money;
}mon;
void
main () {
FILE *fin = fopen ("gift1.in", "r");
FILE *fout = fopen ("gift1.out", "w");
int i,j;
int renshu,money,num;//人数,赠送的钱,赠送的人数
char zsz[15];//赠送的人
char temp[15];
while(fscanf(fin,"%d",&renshu)==1){
mon a[renshu];
for(i=0;i<renshu;i++){
fscanf(fin,"%s",&a[i].name);//读入人员
a[i].money=0;//初始化金钱
}
while(fscanf(fin,"%s%d %d",zsz,&money,&num)==3/*赠送者、金额和人数*/){
j=0;
if(num==0) continue;
while(j<num){
fscanf(fin,"%s",&temp);
for(i=0;i<renshu;i++){
if(strcmp(temp,a[i].name)==0){
a[i].money+=money/num;//受赠者的余额
j++;
break;
}
}
}
for(i=0;i<renshu;i++){
if(strcmp(zsz,a[i].name)==0){
a[i].money+=money%num-money;//赠送者的余额
break;
}
}
}
for(i=0;i<renshu;i++){
fprintf(fout,"%s %d\n",a[i].name,a[i].money);
}
}
exit (0);
}
有于是初学者,代码肯定不够高效,希望您在看后能指出代码中的不足之处