映射中的分配最终为0

Assignments in a map end up as 0?

本文关键字:分配 映射      更新时间:2023-10-16

我是C++的初学者,最近我正在参加一个关于送礼的USACO培训项目。然而,虽然输出应该显示每个参与者的姓名和他们各自的现金金额,但我的结果总是全为零。这是我的代码:

/*
ID: afuhrtr1
PROG: gift1
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <map>
using namespace std;
int main() {
stringstream ss;
ofstream fout ("gift1.out");
ifstream fin ("gift1.in");
int np;
fin >> np;
string people [np];
map<string, int> amounts;
for (int i = 0; i < np; i++)
{
string name;
fin >> name;
//amounts[name]=0;
people[i] = name;
}
while (fin.good())
{
string giver;
fin >> giver;
string twoNumbers;
fin >> twoNumbers;
int spacePos = twoNumbers.find(' ');
int amount;
ss << twoNumbers.substr(0, spacePos);
ss >> amount;
int npgiven;
ss << twoNumbers.substr(spacePos+1);
ss >> npgiven;
for (int i = 0; i < npgiven; i++)
{
string name;
fin >> name;
amounts[name]+=(amount/npgiven);
}
amounts[giver]+=(amount % npgiven - amount);
}
map<string, int>::iterator it;
for (int i = 0; i < np; i++)
fout << people[i] << " " << amounts[people[i]] << endl;
return 0;
}

我假设问题是将东西分配给map元素,或者调用fin.good()。

此外,以下是竞争场景:

一群NP(2≤NP≤10)名字独特的朋友决定交换金钱礼物。这些朋友中的每一个可能会也可能不会给其他任何朋友或所有朋友一些钱。同样,每个朋友可能会也可能不会从任何或所有其他朋友那里收到钱。你在这个问题上的目标是推断出每个人付出的钱比他们得到的钱多多少。

送礼的规则可能与你预期的不同。每个人都会留出一定数额的钱来送礼,并将这笔钱平均分配给所有送礼的人。没有零头钱,所以在2个朋友中除以3,剩下1个的朋友每人1个——剩下的1个留在送礼者的"账户"中。

在任何一组朋友中,有些人都比其他人付出更多(或者至少可能有更多的熟人),有些人比其他人有钱。

给定一组朋友,其中没有一个人的名字超过14个字符,该组中每个人在礼物上花费的钱,以及每个人向其赠送礼物的朋友(子)列表,可以确定该组中的每个人赠送的礼物比收到的多(或少)多少。

输入格式第1行:单个整数,NP第2..NP+1行:每行包含一个组成员的名称线NP+2..结束:NP组线的组织方式如下:组中的第一行告诉将要送礼物的人的名字。该组中的第二行包含两个数字:送礼者将分为礼物的初始金额(在0..2000范围内),然后是送礼者将送礼的人数NGi(0≤NGi≤NP-1)。如果NGi为非零,那么接下来的每一行都会列出礼物收件人的姓名。

USACO没有任何类型的调试器,所以我不确定我是否能有效地检查逻辑错误,但没有编译器错误。

这是你的主要问题。

你肯定可以在有调试器的环境中运行这些代码吗?有免费提供的C++开发环境。如果没有调试器,就无法编写C++代码。StackOverflow不是一个有效的调试器;)