/*
ID: cjn77881
LANG: C
TASK: gift1
*/
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>
#define MaxPeople 10
#define NameLen 15
typedef struct Person Person;
// 使得 Person a;可用,否则须写作: struct Person a;
struct Person{
char name[NameLen];
int money;
};
int n,np,amt,ng;
char name[NameLen];
Person p[MaxPeople],*giver,*receiver;
//*giver 代表定义的一个名为giver的Person类型的指针
void addPerson(char *name){
strcpy(p[np].name,name);
//使用了strcpy函数,注意拼写,没有copy的o,将后者的值赋予前者
np++;
return;
}
Person* lookup(char *name){
//此函数返回值为一个Person类型的指针
for (int i=0;i<np;i++)
if (strcmp(p[i].name,name) == 0) return &p[i];
//使用了strcmp比较函数,两串相同则返回0
}
int main(){
FILE *fin = fopen("gift1.in","r");
FILE *fout = fopen("gift1.out","w");
fscanf(fin,"%d\n",&n);
assert(n<=MaxPeople);
//如果此函数中的判读式不成立,则终止程序
for (int i=0;i<n;i++){
fscanf(fin,"%s",name);
addPerson(name);
}
for (int i=0;i<n;i++){
fscanf(fin,"%s\n%d %d\n",name,&amt,&ng);
giver = lookup(name);
for (int j=0;j<ng;j++){
fscanf(fin,"%s",name);
receiver = lookup(name);
giver->money -= amt/ng;
//若需访问指针所指结构体的成员,则须使用->,意义等价于(*giver).money
receiver->money += amt/ng;
}
}
for (int i=0;i<np;i++)
fprintf(fout,"%s %d\n",p[i].name,p[i].money);
return 0;
}
USACO 1.2.2_gift1
最新推荐文章于 2023-11-01 22:08:28 发布