我是C++的初學者,最近我正在開展一個關於送禮的USACO培訓計劃。然而,儘管輸出結果應該顯示所涉及的每個人的姓名以及他們各自的現金金額,但我的結果總是全部爲零。這裏是我的代碼:地圖中的賦值最終爲0?
/*
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;
}
我假設問題是要麼分配東西到地圖元素,或fin.good()調用。
而且,這裏的比賽場景:
A組NP(2≤NP≤10)唯一命名的朋友已經決定交換的禮金。這些朋友中的每一個都可能會或可能不會給任何或所有其他朋友一些錢。同樣,每個朋友可能會也可能不會從任何或所有其他朋友那裏收錢。你在這個問題上的目標是推導出每個人給出的收入比他們收到的多得多。
送禮規則可能與您預期的不同。每個人撥出一定數額的錢,將這筆錢平均分配給他或她送禮的人。沒有可用的部分資金,因此在剩下1個的朋友中,將2個朋友中的3個分爲1個,剩下1個留在提供者的「帳戶」中。
在任何一羣朋友中,有些人比其他人給予的更多(或者至少可能有更多的熟人),有些人比別人有更多的錢。
給定一組朋友,其中沒有一個人的姓名長於14個字符,組中的每個人花在禮物上的錢以及每個人給予禮物的(子)列表的朋友確定如何組中的每個人給出的得分遠遠超過他們接受的(或更少)。
INPUT FORMAT 1行:一個整數,NP 線2..NP + 1:每行包括一組成員的名稱 線NP + 2..end:這樣組織線NP組: 小組的第一行講述了誰將會送禮的人的名字。 該組中的第二行包含兩個數字:初始金額(範圍爲0..2000)由贈送者分成禮物,然後贈送者給予禮物的人數,NGi( 0≤NGi≤NP-1)。 如果NGi不爲零,則每個下一個NGi行都會列出禮物收件人的姓名。
整數除以整數可能不是你想要的。 – ildjarn
你不檢查錯誤,所以你如何確保他們被成功讀取?另外,VLA不是C++。 – chris
金額總是會比npgiven大得多,並且分部意味着不均勻,所以我想要int/int我想。 USACO沒有任何類型的調試器,所以我不確定我能否有效地檢查邏輯錯誤,但沒有編譯器錯誤。另外,這個VLA在哪裏? – aftrumpet