1.在屏幕上输出以下图案:
*
***
*****
*******
*********
***********
*************
***********
*********
*******
*****
***
*
void PrintDiamond(int k)
{
int line = k; //层数
int max = 2 * k - 1;//最大一层星数
for (int i = 1; i <= max; i++)
{
int virtualLine = (i > line) ? max - i + 1 : i; //虚拟行:当实际行数小于7 虚拟行 = 实际行
// 当实际行数大于7 虚拟行 = 实际行的对称行
int star = (2 * virtualLine) - 1; // 每行星星的个数
int count = (max - star) / 2; // 每行空格的个数
for (int j = 1; j <= (star + count); j++)
{
if (j <= count) //打印空格
{
printf(" ");
}
else //打印星
{
printf("*");
}
}
printf("\n");
}
}
可以利用这个菱形的对称性,只考虑正序的三角形的规律,最大星星行后,找后面行的对称行,然后输出。
2.求出100~999之间的所有“水仙花数”并输出。
void PrintNarcissisticNumber()
{
for (int i = 100; i <= 999; i++)
{
int ge = i % 10; //个位
int shi = (i / 10) % 10; //十位
int bai = i / 100; //百位
int temp = ge * ge * ge + shi * shi * shi + bai * bai * bai;
if (i == temp)
{
printf("%d是水仙花数\n" , i);
}
}
}
结果:153、370、371、407
3.
求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,
例如:2+22+222+2222+22222
void PolynomialSum(int a)
{
int lastRes = a; //上次加的数
int sum = a; //累加的和
for (int i = 1; i < 5; i++)
{
int temp = lastRes * 10 + a; //计算本次应该加的数
sum += temp;
lastRes = temp; //保存本次加的数
}
printf("%d\n" , sum);
}
结果:24690