背景
- C++の処理をC#で書いたのですが、出力結果がC#とC++で異なってしまいました。
- なぜC++の処理をC#で書いたかというと、普段C#で競技プログラミングをしておりC++の回答をC#で書き直したかったためです。
質問したいこと
- なぜC#では期待している結果(C++と同じ出力結果を期待している)が得られないのか
- 期待している結果をC#のコードで実現するにはどうすればよいか
C#の場合
コード
csharp
1using System; 2using System.Collections.Generic; 3using System.Linq; 4 5class Program 6{ 7 static void Main(string[] args) 8 { 9 Program obj = new Program(); 10 obj.Foo(new List<int> { 1 }); 11 } 12 13 void Foo(List<int> A) 14 { 15 if (A.Count == 10) 16 { 17 return; 18 } 19 20 A.Add(1); 21 this.Foo(A); 22 23 // print 24 foreach (var e in A) 25 { 26 Console.Write(e); 27 } 28 Console.WriteLine(); 29 } 30}
結果
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
なぜか再帰呼び出しの最後に実行された値を使いまわしてしまっております。
C++の場合
コード
c++
1#include <iostream> 2#include <vector> 3#define rep(i, n) for (int i = 0; i < (n); ++i) 4using namespace std; 5using ll = long long; 6using p = pair<int, int>; 7 8void foo(vector<int> A) 9{ 10 if (A.size() == 10) 11 { 12 return; 13 } 14 15 A.push_back(1); 16 foo(A); 17 18 // print 19 rep(i, A.size()) 20 { 21 cout << A[i]; 22 } 23 cout << endl; 24} 25 26int main() 27{ 28 foo(vector<int>(1, 1)); 29}
結果
1111111111
111111111
11111111
1111111
111111
11111
1111
111
11
C#でもこちらと同等の結果を得たいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/03 10:59