练习题目3

1>在屏幕上输出以下图案
在这里插入图片描述
思路:两层循环,外层控制行数,里层控制星号的个数。星号是按照2*n-1的方式递增或递减

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
 int i = 0;
 int j = 0;
 for (i = 1; i < 8; ++i){
  for (j = 1; j <=2*i-1; ++j){
   printf("* ");
  }
  printf("\n");
 }
 for (i = 6; i>0; --i){
  for (j = 1; j <=2 * i-1; ++j){
   printf("* ");
  }
  printf("\n");
 }
 system("pause");
 return 0;
}

在这里插入图片描述
2>求出0-999之间的所有"水仙花数"并输出.
“水仙花数"是指一个三位数,其各位数字的立方和确好等于该数本身,如:153=13+53+3^3,则153是一个"水仙花数”.
在数论中,水仙花数(Narcissistic number)也称为自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong),是指一N位数,其各个数之N次方和等于该数。
例如153、370、371、及407就是三位数的水仙花数,其各个数之立方和等于该数:
153 = 1 ^ 3 + 5 ^ 3 + 3 ^ 3
370 = 3 ^ 3 + 7 ^ 3 + 0 ^ 3
371 = 3 ^ 3 + 7^ 3 + 1 ^ 3
407 = 4 ^ 3 + 0 ^ 3 + 7 ^ 3
思路:求出数字的每一位数,利用 % 和 /
代码如下:

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
 int i = 0;
 for (i = 100; i < 1000; ++i){
  if ((i % 10)*(i % 10)*(i % 10) + (i / 10 % 10)*(i / 10 % 10)*(i / 10 % 10) + (i / 100)*(i / 100)*(i / 100) == i)
   printf("%d\n", i);
 }
 system("pause");
 return 0;
}

在这里插入图片描述
3>求sn=a+aa+aaa+aaaa+aaaaa的前五项之和,其中a是一个数字.
例如:2+22+222+2222+22222
思路:后一个加数等于前一个加数乘10加a,容易出错的就是每次加a加的是scanf中得到的a,应该在进入for循环之前
先把a赋给一个新的变量,之后加a就不会出错了。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
 int Sn = 0, a = 0,i=0;
 scanf("%d", &a);
 int t = a;
 for (i = 0; i < 5; ++i){
  Sn += a;
  a = a * 10 + t;
 }
 printf("%d\n", Sn);
 system("pause");
 return 0;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44779696/article/details/88746906