
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
思路: 使用取余和除以相结合来分别取出他们的个十百位,然后再分别将他们的个位的立方和十位的立方和百位的立方相加是否等于这个数本身。
伪代码:
对于每个数字num从1到1000:
百位数字 = (num除以100)对10取余
十位数字 = (num除以10)对10取余
个位数字 = num对10取余
计算立方和 = 百位数字³ + 十位数字³ + 个位数字³
如果 立方和等于num:
输出num是一个水仙花数代码:
#include "stdio.h"
int main()
{
int Units = 0;
int tens = 0;
int hundreds = 0;
for(int i = 100 ; i<1000;i++)
{
Units = i % 10;
tens = (i/10) % 10;
hundreds = (i/100) % 10;
int result = Units*Units*Units + tens*tens*tens + hundreds*hundreds*hundreds;
if(result == i)
{
printf("%d is the flowser numbers\n",i);
}
}
return 0;
}题目:将一个正整数分解质因数。例如:输入 90,打印出 90=2*3*3*5
思路: 质因数分解是将一个正整数表示为质数的乘积。我们需要从最小的质数2开始,逐步检查是否能整除输入的数。如果能整除,则该数是一个质因数,继续除以这个数直到不能整除为止。每次找到一个质因数后,将输入的数除以这个质因数,减少问题规模。继续检查下一个可能的因数,直到输入的数变为1。
伪代码:
读取用户输入的正整数 n;
如果 n 等于 1,直接输出 1;
初始化一个列表 factors,用于存储质因数;
从 i = 2 到 n:
当 n 能被 i 整除时:
将 i 添加到 factors 列表;
将 n 除以 i;
重复此过程直到 n 不能被 i 整除;
输出 factors 列表中的所有质因数。代码:
#include <stdio.h>
int main() {
int num;
printf("请输入一个正整数:");
scanf("%d", &num);
if (num == 1) {
printf("1 的质因数分解为:1\n");
return 0;
}
printf("%d 的质因数分解为:", num);
for (int i = 2; i <= num; i++) {
while (num % i == 0) {
printf("%d", i);
num = num / i;
if (num == 1) {
printf("\n");
return 0;
}
printf(" × ");
}
}
return 0;
}题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
思路: 可以使用if-else也可以使用三元法则。
伪代码:
输入一个成绩分数 score;
等级 = (score >= 90) ? "A" :
(score >= 60) ? "B" : "C";
输出 "成绩等级为:" + 等级;代码:
#include <stdio.h>
int main() {
int num;
printf("请输入一个正整数:");
scanf("%d", &num);
if (num == 1) {
printf("1 的质因数分解为:1\n");
return 0;
}
printf("%d 的质因数分解为:", num);
for (int i = 2; i <= num; i++) {
while (num % i == 0) {
printf("%d", i);
num = num / i;
if (num == 1) {
printf("\n");
return 0;
}
printf(" × ");
}
}
return 0;
}题目:输入两个正整数m和n,求其最大公约数和最小公倍数
思路: 最小公倍数=输入的两个数之积除于它们的最大公约数,关键是求出最大公约数。求最大公约数用辗转相除法(又名欧几里德算法)
伪代码:
输入两个正整数 m 和 n;
计算最大公约数:
使用欧几里得算法:
当 n 不等于 0 时:
临时变量 temp = m % n;
m = n;
n = temp;
最大公约数为 m;
计算最小公倍数:
最小公倍数 = (原始 m * 原始 n) / 最大公约数;
输出最大公约数和最小公倍数;代码:
#include <stdio.h>
int main() {
int m, n, temp, original_m, original_n;
printf("请输入两个正整数 m 和 n:");
scanf("%d %d", &m, &n);
original_m = m;
original_n = n;
// 计算最大公约数(GCD)使用欧几里得算法
while (n != 0) {
temp = m % n;
m = n;
n = temp;
}
int gcd = m;
// 计算最小公倍数(LCM)
int lcm = (original_m * original_n) / gcd;
printf("最大公约数是:%d\n", gcd);
printf("最小公倍数是:%d\n", lcm);
return 0;
}题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
思路: 分别用对应的变量去保存中英文字母、空格、数字和其它字符的个数,利用while语句,条件为输入的字符不为'\n'。
伪代码:
初始化计数器:字母数 = 0,空格数 = 0,数字数 = 0,其他字符数 = 0;
输入一行字符;
对于这行字符中的每个字符:
如果字符是字母:
字母数 += 1
否则如果字符是数字:
数字数 += 1
否则如果字符是空格:
空格数 += 1
否则:
其他字符数 += 1
输出字母数、空格数、数字数和其他字符数。代码:
#include <stdio.h>
int main() {
char c;
int letterCount = 0, spaceCount = 0, digitCount = 0, otherCount = 0;
printf("请输入一些字符:\n");
while ((c = getchar()) != '\n') {
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
letterCount++;
} else if (c >= '0' && c <= '9') {
digitCount++;
} else if (c == ' ') {
spaceCount++;
} else {
otherCount++;
}
}
printf("字母 = %d, 数字 = %d, 空格 = %d, 其他 = %d\n", letterCount, digitCount, spaceCount, otherCount);
return 0;
}原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。