【解決方法】コード 2022 の出現の初日の問題でユーザー入力を取得できません


質問は簡単ですが、私が克服できない唯一のことは、ユーザーからの入力としてエルフのカロリー データを取得することです。 私は新しい行を読む必要があり、新しい行を取得するたびに、合計をエルフが持つことができる最大カロリー/合計に更新し、合計を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

ベクトルにカロリーを保存することは良い考えです。

C++
std::vector<int> numbers;

次に、calalar.txt ファイルに記述されているようにカロリーを書き込み、このファイルを 1 行ずつ読み取ることが実用的です。 空行ごとに合計をベクトルに書き込み、ファイルの最後に到達するまで読み取りを続けます。

C++
std::ifstream file;
file.open("calories.txt");
while (file.peek() != EOF) {
   getline(file, line);

   // TODO: convert to number and sum up

   }

file.close();

最後に、すべてを出力して完了です。

C++
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;
}

このコードは、そのようなことを行うことができます.

コメント

タイトルとURLをコピーしました