1.在屏幕上输出以下图案:
思路:每行的*数量是行数的2倍减一个,将图形分为上下两部分,用两次for循环进行输出,上半部分正常输出,下半部分先数出下半部分的行数,然后for循环初始化条件等于行数,更新条件依次减减,注意换行符。
代码:
#include<stdio.h>
#include<stdlib.h>
//每行*的打印
void Print_s(int i){
for (int j = 0; j < 2 * i - 1; j++){
printf("*");
}
//每行完成后都有换行符
printf("\n");
}
int main(){
//图形的上半部分
for (int i = 1; i < 8; i++){
Print_s(i);
//两行之间的换行符
printf("\n");
}
//图形的下半部分
for (int j = 6; j>0; j--){
Print_s(j);
printf("\n");
}
system("pause");
}
2.求出0 ~ 999之同的所有水仙花数并输出。
“水仙花数"是指一个三位数, 其各位数字的立方和确好等于该数本身,如 153=1+5+3, 则153是一个水仙花数"。
在数论中,水仙花数(Narissistic number)也称为自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),是指一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>
//判断是否为水仙花数
void Judge(int i){
int x = i;
//数组存放个十百位
int arr[3] = { 0 };
for (int a = 0; a < 3; a++){
arr[a] = i % 10;
i = i / 10;
}
int j = 0;
//每位数自乘三次,然后相加
for (int a = 0; a < 3; a++){
int y = arr[a] * arr[a] * arr[a];
j += y;
}
//判断相加起来的值是否与要判断的数相等
if (x == j){
printf("%d ", x);
}
}
int main(){
//水仙花数为一个三位数,所以初始值从100 开始
for (int i = 100; i < 1000; i++){
Judge(i);
}
system("pause");
}
3.求Sn=a+aa+aaa+aaaa+aaaaa前五项的和,其中a是一个数字。
例如:2+22+222+2222+22222
思路:从第二项开始的每一项都等于前一项乘10再加上a,比如说,22=2X10+2;222=22X10+2,利用for循环循环5次,依次将各项相加起来就得出结果。
代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
//计算每项的数
void NumAdd(int i){
int x=0,b = 0;
//第一项的处理:b=0*10+i,例如:i=2时,b=0*10+2;
for (int a = 0; a < 5; a++){
b = b * 10 + i;
//将每项的数依次相加
x += b;
}
printf("%d",x);
}
int main(){
printf("请输入:");
int i = 0;
scanf("%d", &i);
NumAdd(i);
system("pause");
}