質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

3回答

1860閲覧

指定回数繰り返し足し算するやり方を教えてください。

KeilyX07

総合スコア29

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2020/07/30 11:45

編集2020/07/30 11:56

やりたいこと

ある公園でりんごを配ることにした。1人目には1つ、2人目には2つ、3人目には3つ、・・・n人目にはnつ、というような配り方をする。リンゴは全部でいくつ必要か。

※nはConsoleから取得するようにしています。

書いたコード

C#

1 static void Main(string[] args) 2 { 3 int i, n; 4 5 Console.Write("人数を入力してください:"); 6 n = int.Parse(Console.ReadLine()); 7 8 // ここに書くコードを教えてほしいです。 9 10 //自分で考えたのは以下です 11 i = 0; 12 while (i <= n) 13 { 14 i++; 15 } 16 17 Console.WriteLine(i);

######i は数の計算、nは入力する人数です。

今の心境

正直なところ変数がいくつ必要で、for文またはwhile文のどちらを使うのが有効なのかというのもわかっていない状態です。
もしよければそのあたりも教えていただけたら幸いです。

開発環境

・Microsoft Visual Studio Community

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

while も for も要りません。変数は一つで十分です。

C#

1using System; 2using System.Numerics; 3 4namespace ConsoleApp1 5{ 6 class Program 7 { 8 static void Main() 9 { 10 var n = BigInteger.Parse(Console.ReadLine()); 11 Console.WriteLine((n + 1) * n / 2); 12 } 13 } 14}

追記 System.Reactive を使う

C#

1using System; 2using System.Numerics; 3using System.Reactive; 4using System.Reactive.Linq; 5using System.Threading.Tasks; 6 7namespace ConsoleApp1 8{ 9 class Program 10 { 11 static async Task Main() => await Observable 12 .Repeat(Unit.Default) 13 .Select(_ => Console.ReadLine()) 14 .TakeWhile(a => !string.IsNullOrEmpty(a)) 15 .Select(a => BigInteger.Parse(a)) 16 .Retry() 17 .ForEachAsync(a => Console.WriteLine((a + 1) * a / 2)); 18 } 19}

投稿2020/07/30 11:58

編集2020/07/30 12:09
Zuishin

総合スコア28662

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KeilyX07

2020/07/30 12:12

最初に書いていただいたシンプルなやり方で無事にできました!追記はもう少しC#に触れてから再度読んでみようと思います。ありがとうございました!
guest

0

ファイル先頭にusing System.Linq;を追加して、

C#

1i = Enumerable.Range(1, n).Sum();

途中で何をやっているか見えないという声(?)にお応えして、

C#

1i = Enumerable.Range(1, n).Aggregate(0, (sum, next) => sum + next, sum => sum);

投稿2020/07/30 11:58

編集2020/07/30 12:20
Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KeilyX07

2020/07/30 12:13

シンプルなやり方でこれでも動きました!回答ありがとうございました。
guest

0

まずはあなたなりに、n回の繰り返しを考えてみてください。
それが実際にn回かどうかを確認するコードも考えましょう。

それができたらそれを提示しましょう。そこまでいけば、完成までアドバイスできると思います

投稿2020/07/30 11:48

y_waiwai

総合スコア87784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KeilyX07

2020/07/30 11:58

一応質問のところに追加しました。ですがこれだとただnに入力した値に1を足すだけの答えが返ってきてしまい思っていた結果にはなりませんでした。while文の中に i+2 などを追加するとエラーになってしまってどうすればいいかわからないです。
y_waiwai

2020/07/30 12:11

おお、すばらしい。 それでは、一人目は1つですから、 i=0; ってのは、 i=1; にかえましょう。 これで一人目は1、ふたりめは2、3人目は3、、、ってのが i で実現できたんで、それを足していこう もう一つ変数を用意して、 int t=0; ループの中で足し込んでいけばいいですね t=t+i;
KeilyX07

2020/07/30 12:14

他の方の回答で解決しましたが、「自分の考えを提示する」という考え方を改めて学習しました。ありがとうございました!
KeilyX07

2020/07/30 12:15

そしてコメント返信中だったので返信気づきませんでしたが、ループを使ったやり方で教えてくださりありがとうございます!
KeilyX07

2020/07/30 12:24

static void Main(string[] args) { int i, n; Console.Write("人数を入力してください:"); n = int.Parse(Console.ReadLine()); i = 1; int t = 0; while (i <= n) { t = t + i; } Console.WriteLine(i); BA選んだあとで申し訳ないのですが、これだと人数を入力後何も表示されなくなりました... どこが間違っているか教えていただいてもいいですか?
Daregada

2020/07/30 12:58

繰り返しの内部でiの値を(1増やした値に)更新する処理が抜けています。
KeilyX07

2020/07/30 13:23

static void Main(string[] args) { int i, n; Console.Write("人数を入力してください:"); n = int.Parse(Console.ReadLine()); i = 1; int t = 0; while (i <= n) { i = i++; t = t + i; } Console.WriteLine(i); } こういうことでしょうか(これだと同様に人数入力後何も表示されません)
y_waiwai

2020/07/30 13:26

i++; ... Console.WriteLine(t); ですね
Daregada

2020/07/30 13:27

「i = i++;」だと、iの値は永久に増えません。 「i++;」にするか、「i = i + 1;」に変更して、なおかつ「t = t + 1;」よりも後に移動させてください。
KeilyX07

2020/07/30 14:26

i++; に変更、Console.WriteLine(t)に変更することで解決しました!長くありがとうございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問