1. 文件输入输出好别扭;
2. 第一次没注意到cas--之后for循环就没作用了,得不到结果。
/*
ID: dollarzhaole
PROG: gift1
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct Node
{
string name;
int sendp;//送给几个人
int getm;//收到的钱
int sendm;//送出去的钱
int inim;//刚开始的钱
} node[11];
int cas;
int getname(string str)
{
int num;
for (int i = 0; i < cas; i++)
{
if (str == node[i].name)
{
num = i;
break;
}
}
return num;
}
int main()
{
ofstream fout ("gift1.out");
ifstream fin ("gift1.in");
int i, j, curp, sendp;
string str1, str2;
fin >> cas;
for (i = 0; i < cas; i++)
{
fin >> node[i].name;
node[i].getm = 0;
node[i].sendm = 0;
}
int n = cas;
while (n--)
{
fin >> str1;
curp = getname(str1);
fin >> node[curp].inim >> node[curp].sendp;
for (j = 0; j < node[curp].sendp; j++)
{
fin >> str2;
sendp = getname(str2);
node[sendp].getm += node[curp].inim / node[curp].sendp;
node[curp].sendm += node[curp].inim / node[curp].sendp;
}
}
for (i = 0; i < cas; i++)
{
cout << node[i].name << ' ' << node[i].getm - node[i].sendm << endl;
fout << node[i].name << ' ' << node[i].getm - node[i].sendm << endl;
}
return 0;
}
下边是给的参考代码:
#include <stdio.h>
#include <string.h>
#include <assert.h>
#define MAXPEOPLE 10
#define NAMELEN 32
typedef struct Person Person;
struct Person {
char name[NAMELEN];
int total;
};
Person people[MAXPEOPLE];
int npeople;
void
addperson(char *name)
{
assert(npeople < MAXPEOPLE);
strcpy(people[npeople].name, name);
npeople++;
}
Person*
lookup(char *name)
{
int i;
/* look for name in people table */
for(i=0; i<npeople; i++)
if(strcmp(name, people[i].name) == 0)
return &people[i];
assert(0); /* should have found name */
}
int
main(void)
{
char name[NAMELEN];
FILE *fin, *fout;
int i, j, np, amt, ng;
Person *giver, *receiver;
fin = fopen("gift1.in", "r");
fout = fopen("gift1.out", "w");
fscanf(fin, "%d", &np);
assert(np <= MAXPEOPLE);
for(i=0; i<np; i++) {
fscanf(fin, "%s", name);
addperson(name);
}
/* process gift lines */
for(i=0; i<np; i++) {
fscanf(fin, "%s %d %d", name, &amt, &ng);
giver = lookup(name);
for(j=0; j<ng; j++) {
fscanf(fin, "%s", name);
receiver = lookup(name);
giver->total -= amt/ng;
receiver->total += amt/ng;
}
}
/* print gift totals */
for(i=0; i<np; i++)
printf("%s %d\n", people[i].name, people[i].total);
exit (0);
}