Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語でフロイドの逆三角形を出力するプログラムの書き方

プログラムの概要

フロイドの三角形(Floyd's Triangle)は、自然数を直角三角形状に並べた数の配列で、コンピュータサイエンス教育の場でよく使われる定番の題材です。名称は計算機科学者のロバート・フロイド(Robert Floyd)にちなんでいます。左上隅の「1」を起点として、連続する自然数を行ごとに順番に埋めていくことで定義されます。

1                      15 14 13 12 11
2 3                    10 9 8 7
4 5 6                  6 5 4
7 8 9 10               3 2
11 12 13 14 15         1
フロイドの三角形        フロイドの逆三角形

アルゴリズム

フロイドの三角形を出力する手順

1. フロイドの三角形を出力する行数を受け取る
2. 1行目には値「1」を表示する
3. 2行目には「2」と「3」の2つの値を表示する
4. 3行目には「4」「5」「6」の3つの値を表示する
5. 指定された行数に達するまで同様の処理を繰り返す

フロイドの逆三角形を出力する手順

1. フロイドの逆三角形を出力する行数を受け取る
2. 逆三角形の形に従って、値を降順(逆順)に表示していく

C言語によるサンプルコード

/* フロイドの逆三角形を出力するプログラム */
#include<stdio.h>
int main() {
    int r,c=1;
    int rows,revrows,r1,c1,d;
    clrscr();
    printf("Enter number of rows to print the Floyd's Triangle: ");
    scanf("%d", &rows);
    printf("\n");
    for (r=1;r<=(rows*(rows+1))/2;r++){
        printf("%d ",r);
        if(r==(c*(c+1))/2){
            printf("\n");
            c++;
        }
    }
    printf("\n\n");
    /* フロイドの逆三角形の出力 */
    printf("Enter number of rows to print the reverse of Floyd's Triangle: ");
    scanf("%d",&revrows);
    printf("\n\n");
    printf("Reverse of Floyd's Triangle\n");
    printf("\n\n");
    d = (revrows*(revrows+1))/2;
    for(r1=revrows;r1>=1;r1--){
        for(c1=r1;c1>=1;c1--,d--){
            printf("%4d", d);
        }
        printf("\n");
    }
    getch();
    return 0;
}

なお、clrscr()getch() は古いTurbo C系コンパイラが提供する conio.h 依存の関数です。GCCやClangなど近年の標準的なコンパイラで実行する場合は、これらの行を削除すればそのまま動作します。

実行結果

C言語でフロイドの逆三角形を出力するプログラムの書き方

  1. C言語で正方形の中に正方形を表示するプログラムの作り方

    プログラムの概要本プログラムは、C言語を使って「正方形の中に正方形」というパターンをコンソールに出力するものです。実行すると、以下のように二重の正方形が表示されます。アルゴリズム描画する外側の正方形の行数をユーザーから入力として受け取る。指定された行数をもとに、外側の正方形を表示する。外側の正方形の内側に、もう一つ小さな正方形を表示する。サンプルコード以下が、正方形の中に正方形を表示するC言語プログラムの完全なソースコードです。/* Program to print Square inside Square */#include <stdio.h>int main(){ 

  2. C言語で数値パターンを出力するプログラムの作り方

    プログラムの概要 このプログラムは、ユーザーから行数を入力してもらい、それに応じた数値パターンを画面に出力するものです。 例として、入力が「5行」の場合、次のようなパターンが出力されます。 1 6 2 10 7 3 13 11 8 4 15 14 12 9 5 一見複雑に見えるこのパターンにも、きちんとした規則性があります。各行の先頭の数値は「1、6、10、13、15」と増加幅が5→4→3→2と1ずつ減っていき、行の中でも右に進むほど差が大きくなる仕組みです。 アルゴリズム ・各行の末尾側から順にパターンを出力する ・まず各行の最後の列を確定させる ・2行目以降は後ろから2番目の列から出力を