[ad_1]
質問は簡単ですが、私が克服できない唯一のことは、ユーザーからの入力としてエルフのカロリー データを取得することです。 私は新しい行を読む必要があり、新しい行を取得するたびに、合計をエルフが持つことができる最大カロリー/合計に更新し、合計を0に再割り当てする必要があります.他のエルフのカロリーについても同じことを行います. .
(以下から問題文を読んでください。 https://adventofcode.com/2022/day/1[^])
以下のコードは私が試したものですが、完全に間違っています!
君の力が必要!
私が試したこと:
#include <iostream> #include <vector> using namespace std; int ans = -1; int main() { int n; int t; int sum = 0; cin>>t; while(t--) { cin>>n; if(cin.get() == '\n') { cin>>n; if(cin.get() == '\n') { if(ans < sum) ans = sum; sum = 0; } } sum += n; } cout<<ans; return 0; }
解決策 1
見積もり:以下のコードは私が試したものですが、完全に間違っています!
はい。 です。 そして、あなたはその理由を知りません。
幸いなことに、何が起こっているのかを調べるのに役立つツール、デバッガーを利用できます。 使用方法はコンパイラ システムによって異なりますが、IDE と「デバッガ」の名前を Google で検索すると、必要な情報が得られます。
関数の最初の行にブレークポイントを置き、デバッガーでコードを実行します。 次に、コードとデータを見て、何が起こるべきかを手動で解決します。 次に、各行を 1 ステップ実行して、予想どおりの動作を確認します。 そうでない場合は、問題が発生したときであり、後戻りして (またはもう一度実行して詳しく調べて) 原因を突き止めることができます。
申し訳ありませんが、私たちはあなたにそれを行うことはできません – 新しい (そして非常に便利な) スキルを学ぶ時が来ました: デバッグ!
解決策 2
ベクトルにカロリーを保存することは良い考えです。
std::vector<int> numbers;
次に、calalar.txt ファイルに記述されているようにカロリーを書き込み、このファイルを 1 行ずつ読み取ることが実用的です。 空行ごとに合計をベクトルに書き込み、ファイルの最後に到達するまで読み取りを続けます。
std::ifstream file; file.open("calories.txt"); while (file.peek() != EOF) { getline(file, line); // TODO: convert to number and sum up } file.close();
最後に、すべてを出力して完了です。
for(size_t i=1; i <= numbers.size(); i++) std::cout << "Elf No: " << i << " carrying " << numbers[i-1] << " calories\n";
解決策 3
int main() { int n; cin>>n; vector<int> elves[n]; for(int i=0;i<n;i++){ string s; do{ s = ""; getline(cin, s); cout<<"string size-> "<<s.size()<<endl; if(s.size()) elves[i].push_back(stoi(s)); }while(s.size() != 0); } return 0; }
このコードは、そのようなことを行うことができます.
[ad_2]
コメント