セルフテスト-1プリント砂時計
1329 ワード
この問題では、与えられた記号を砂時計の形に印刷するプログラムを書く必要があります.例えば、17個の「*」が与えられ、以下の形式で印刷する必要がある.
「砂時計形状」とは、行ごとに奇数個の記号が出力されることを意味する.各行のシンボルの中心を揃えます.隣接する2行の記号数の差2;シンボル数は、まず大きい順から小さい順に1に減少し、小さい順から大きい順に増加する.先頭記号の数が等しい.
任意のN個の記号を与えると,必ずしも砂時計を構成できるとは限らない.印刷された砂時計はできるだけ多くの記号を使うことができるように要求されています.
入力形式:
入力は、1行に1つの正の整数N(≦1000)と1つの記号を与え、中間をスペースで区切る.
出力フォーマット:
まず所与の記号からなる最大の砂時計形状を印刷し,最後に1行に残った不要な記号数を出力する.
サンプルを入力:
出力サンプル:
*****
***
*
***
*****
「砂時計形状」とは、行ごとに奇数個の記号が出力されることを意味する.各行のシンボルの中心を揃えます.隣接する2行の記号数の差2;シンボル数は、まず大きい順から小さい順に1に減少し、小さい順から大きい順に増加する.先頭記号の数が等しい.
任意のN個の記号を与えると,必ずしも砂時計を構成できるとは限らない.印刷された砂時計はできるだけ多くの記号を使うことができるように要求されています.
入力形式:
入力は、1行に1つの正の整数N(≦1000)と1つの記号を与え、中間をスペースで区切る.
出力フォーマット:
まず所与の記号からなる最大の砂時計形状を印刷し,最後に1行に残った不要な記号数を出力する.
サンプルを入力:
19 *
出力サンプル:
*****
***
*
***
*****
2
#include
#include
int main(void)
{
int N;
char c;
scanf("%d %c", &N,&c);
int i=1,j;
int n = sqrt((double) (N + 1) / 2);
for (i = 1; i <= n; i++)
{
for (j = 1; j= 1; j--)
printf("%c", c);
putchar('
');
}
for (i = 1; i <= n - 1; i++)
{
for (j = 1; j <= n-i-1; j++)
printf(" ");
for (j = 1; j <= 2 * i + 1; j++)
printf("%c", c);
putchar('
');
}
printf("%d", N - (2 * n*n - 1));
return 0;
}