這道題相信大家在初學C语言的時候都做過,我在做此提示測試總有兩個點過不去,我想了又想可能是算法有誤,這道題也是要找規律,我們要找到層數和總個數直接的算術關係,理清這些,這道題也就迎刃而解了。
我們先觀察,當上三角層數為3時,總數為:3*3*2-1=17
當上三角層數為4時,總數為:4*4*2-1=31 .....
多試几組我們就能發現兩者之間的關係為總數n=i*i*2-1(i為上三角層數)
到此找到提基本就解決了? ? ? ?
#include<stdio.h>
#include<math.h>
int main()
{
int n; char chara;
scanf("%d %c", &n, &chara);
int i, diff = 0,j, num = 0;
num = (n + 1) / 2;
num = (int)sqrt(num);//上三角層數,整個沙漏個數為num*num*2-1
diff = n - (num * num * 2 - 1);
for (i = 0; i < num; i++) {
for (j = i; j > 0; j--) {
printf(" ");
}
for (j = 0; j < 2 * (num - i) - 1; j++) {
printf("%c", chara);
}
printf("\n");
}
for (i = 1; i < num; i++) {
for (j = num - i - 1; j > 0; j--) {
printf(" ");
}
for (j = 0; j < 2 * i + 1; j++) {
printf("%c", chara);
}
printf("\n");
}
printf("%d", diff);
return 0;
}
|