1.打印水仙花数
解题思路:根据水仙花数的特点:(1)判断此数字i的位数
(2) 对所获得的i的每一位,计算每一位的n次方和
(3)进行比较判断以及打印
具体代码如下:
//打印水仙花数
/**求出0 - 100000 之间的所有水仙花数
水仙花数是指一个n位数,其各位数字的n次方之和恰好等于该数本身,如153 = 1^3 + 5^3 + 3^3;则153是一个水仙花数
*/
int main(){
int i = 0;
for (i = 0; i < 100000;i++){
//判断i是否为自幂数
//1.计算i的位数——n
int tmp = i;
int count = 1;
int sum = 0;
while (tmp /= 10){
count++;
}
//2.获得i的每一位,计算每一位的n次方和
tmp = i;
while (tmp){
sum += pow(tmp % 10,count);
tmp /= 10;
}
//3.比较打印
if (i == sum){
printf("%d ",i);
}
}
return 0;
}
2.打印菱形:
解题思路:根据所打印菱形的特点:可先打印上半部分,在打印下半部分,计算好空格,打印*即可
具体代码实现如下:
//打印菱形
/*
*
***
*****
*******
*****
***
*
*/
int main(){
int line = 0;
int i = 0;
scanf("%d",&line);
//上半部分:
for (i = 0; i < line;i++){
//打印一行:打印空格,在打印*
int j = 0;
for (j = 0; j < line - 1 - i;j++){
printf(" ");
}
for (j = 0; j < 2 * i + 1;j++){
printf("*");
}
printf("\n");
}
//打印下半部分
for (i = 0; i < line - 1;i++){
//打印一行:先打印空格,在打印*
int j = 0;
for (j = 0; j <=i ;j++){
printf(" ");
}
for (j = 0; j < (line - 1-i) * 2-1;j++){
printf("*");
}
printf("\n");
}
return 0;
}
3.打印杨辉三角
具体代码实现如下:
//打印杨辉三角
/*
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1
1 1
1 2 1
1 3 3 1 arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j]
1 4 6 4 1 //第一列为1,对角线也全为1
*/
int main(){
int arr[100][100] = { 0 };
int i = 0;
int j = 0;
int n = 0;
printf("请输入需要打印的行数:");
scanf("%d",&n);
for (i = 0; i < n;i++){
for (j = 0; j < n;j++){
if (i == j) //将对角线赋值为1
arr[i][j] = 1;
if (j == 0) //将第1列赋值为1
arr[i][j] = 1;
if (i >= 2 &&j >= 1){
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
}
for (i = 0; i < n; i++){
for (j = 0; j <= i; j++){
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}