すみません、私、今、頭が回っていないので理解していないです。
(それ以前に算数苦手...)
2段目からは入力した数字を1づつ増やしていきそれを10で割った余りを直角三角形のように表示する
の、"それを10で割った余りを..." の部分が理解できていないです。
最初の入力値 n を段数として、逆三角形を織りなすように、数字をつなげていく ( 1,2,3,4,...9,0,1... ) ということでしょうか。
それだとしても、最初の
整数を入力してください:4
と三段落目に当たる
出力結果 123456789
が一致しませんよ?
私が思った内容でいいなら。
まず、質問者さんは「プログラミングは置いといて」、「現実世界ではどのようにやりますか」?
つまり、手書きで今回のような問題があった場合、(例えば算数や数学みたいなテストとかで)
どのようにしますか?
私なら、
一段目は 1 から n までを書き、
二段目は その n の次から開始し、逆三角形になるように考える
三段目は 二段目の最後の数字 + 1 した値からはじめて...
とやります。
段数は n ÷ 10 した値っぽい(ただし妄想)ので、n / 10 した値が段数になるように行う。
そして、一段目から二段目に行くときは、「一段目で、最後に出てきた値」を覚えておく。
二段目はその値 +1 した値から始める。
ただし、9 の後は常に 0 に戻るとしているので、そのままだと 1,2,3...,9,10,11,... となってしまうので、修正するためのロジックを考える。
値が9なら( +1すると 10になるので修正するために ) 0 に初期化しておく。
という風に。
これをコード化すればいいのでは?
[追記1]
(返信にて)
ということは変数を宣言して...
そうだと思います。
人間だと脳で記憶できますが、機械はそれができません。(出来るにはできるが、変数を使ったりするし...)
なので変数かなんかで最後の値を確保して、そこから始める必要があります。
そして、9の直後は0 ...っていうのをやるのは面倒(毎回書くと思うから)なので、関数化します。
例えば、
C
1int progressNumber( int num ){
2 if( num == 9 ) return 0; // 9の次は常に0にするため
3// それ以外なら num + 1 した値を返す
4return (num + 1);
5}
としておけば、
C
1int main( void ){
2 int n; // 段の最後の値を確保するための変数
3 // for文かなんかで
4 // ここで一行分の数列表示
5 // n に 最後の値を入れる
6 n = progressNumber( n );
7 // forなんかの終了のアレ
8}
みたいに書ける。
答え書いてもいいですが、それをやっちゃうと、質問者さんが窮地に陥る可能性がある(例えば出題者にバレるとか)ので、あえて伏せています。