?这个题目比上个题目要稍微难一点,题目意思大概是有一群人,互相送money,要求送出的都是整数,每个人总共送出的money数量不一样,平均分给他的朋友们,不能送出的自己留下,每个人的朋友数量也不一样。要求从文件中读取数据,并运算算出最后每个人收到的money比送出的money多的数量。
???? 这个程序的关键是怎么处理凌乱的数据吧,我是定义结构体来保存每个人的数据的。程序中在使用strcmp()函数时出现了问题,我使用了判断语句 if(strcmp(name,person[i].name) 来判断两个字符数组是否相等,如果相等则执行if后面的操作,但这样写是错的,相等时strcmp()返回的是0,这样写的话适得其反。这是个很简单的错误,但相信有许多人都会犯这么简单的一个错误,所以我把他记下来,以免以后会犯同样的错误。
???
?01 /*?
02 ID: whutzha1?
03 PROG: gift1?
04 LANG: C++?
05 */
06 #include
07 #include
08 using namespace std;?
09 ifstream cin("gift1.in");?
10 ofstream cout("gift1.out");?
11???
12 struct Node?
13 {?
14?? char name[14];?
15?? int? give;?
16?? int? rest;?
17?? int? friends;? //朋友数量?
18?? int? friends_num[10];? //保存朋友的下标?
19 };?
20???
21 int main()?
22 {?
23??? int i,j,k,m,num;?
24??? cin>>num;?
25??? Node person[10];?
26??? char name[14];?
27???
28??? for(i=0;i 29??? {? 30????? cin>>person[i].name;? 31??? }? 32??? 33??? for(i=0;i 34?? {? 35????? cin>>name;? 36????? for(j=0;j 37????? {? 38??????? if (strcmp(name,person[j].name)==0)? 39??????? {? 40??????? cin>>person[j].give;? 41??????? cin>>person[j].friends;? 42??????? break;? 43??????? }? 44????? }? 45????? for(m=0;m 46????? {? 47???????? cin>>name;? 48???????? for(k=0;k 49???????? {? 50???????????? if (strcmp(name,person[k].name)==0)? {person[j].friends_num[m]=k;break;}? 51???????? }? 52????? }? 53????? }? 54??? for(i=0;i 55??? for(i=0;i 56??? {??? 57????? if (person[i].give)??? 58????? {? 59??????? person[i].rest+=(person[i].give%person[i].friends);? 60??????? for(j=0;j 61??????? {? 62??????????? person[person[i].friends_num[j]].rest+=(person[i].give/person[i].friends);? 63??????? }? 64????? }? 65 }? 66??? 67??? for(i=0;i 68??? {? 69????? cout< 70??? }? 71??? return 0;? 72 }
?