一个数恰好是他的因子之和,这个数就被称为“完数”。例如;6=1+2+3.求1000内的完数
#include <stdio.h>
// 判断一个数是否为完美数的函数
int isPerfect_numbers(int num)
{
int sum = 1; // 初始化因子和为1,因为1是所有正整数的因子
for (int i = 2; i * i <= num; i++) // 从2开始遍历到num的平方根
{
if (num % i == 0) // 如果i是num的因子
{
sum += i; // 将i加入因子和中
if (num != num / i) // 如果i不等于num/i(避免重复计算)
{
sum += num / i; // 将num/i加入因子和中
}
}
}
return sum == num; // 如果因子和等于num,返回1,否则返回0
}
int main()
{
for (int perfect_numbers = 2; perfect_numbers <= 1000; perfect_numbers += 2) // 从2开始遍历到1000,步长为2(只考虑偶数)
{
if (isPerfect_numbers(perfect_numbers)) // 如果perfect_numbers是完美数
{
printf("%d\n", perfect_numbers); // 输出perfect_numbers
}
}
return 0;
}
一球从100米高度自由落下,每次落地反弹后跳回原来高度的一半,再落下,求十次落地后,共经过多少米?第10次多高?
#include <stdio.h>
int main()
{
double height = 100;// 初始高度为100米
int time = 10;// 下落次数为10次
double distance = 0;// 总距离初始化为0
for (time = 1; time <= 10; time++)
{
distance = distance + height;// 累加每次下落的距离
height = height / 2;// 每次落地后,高度减半
if (time != 10)
distance = distance + height;// 除了最后一次落地,其他次数还有反弹高度的距离
}
printf("%lf\n", distance);
printf("%lf\n", height);
return 0;
}
函数表达
void cDH(double* distance, double* height)
{
*distance = 0;
*height = 100;
for (int times = 1; times <= 10; times++)
{
*distance += *height;
*height = *height / 2;
if (times != 10)
*distance += *height;
}
}
int main()
{
double distance = 0;
double height = 0;
cDH(&distance, &height);
printf("%lf\n", distance);
printf("%lf\n", height);
return 0;
}
猴子吃桃问题:猴子第一天摘了若干个桃子,当即吃了一半,不过瘾,又吃了一个,第二天早上又将剩下的桃子吃了一半,又多吃了一个。以后每天都吃了前一天的一半多一个,到第10天只剩一个桃子。求第一天吃了多少?
#include <stdio.h>
int main()
{
int peach = 0;
int peach1 = 1;
for (int i = 1; i <= 10; i++)
peach = peach * 2 + peach1;
printf("%d\n", peach / 2 + 1);
return 0;
}
函数表达
#include <stdio.h>
int calculatePeach(int day)
{
int peach = 0;
int peach1 = 1;
for (int i = 1; i <= day; i++)
peach = peach * 2 + 1;
return peach / 2 + 1;
}
int main()
{
int day = 10;
calculatePeach(day);
printf("%d\n", calculatePeach(day));
return 0;
}
打印菱形,数字类图形
#include <stdio.h>
// 打印一个由数字组成的菱形
void print_rhombus(int n)
{
int i = 0; // 循环计数器i
int j = 0; // 循环计数器j
for (i = 1; i <= n; i++) // 从第1行到第n行
{
for (j = 1; j <= n - i; j++) // 打印空格,控制每行的缩进
{
printf(" ");
}
for (j = 1; j <= 2 * i - 1; j++) // 打印数字,控制每行的数字个数
{
printf("%d", i % 10); // 取i的个位数作为打印的数字
}
printf("\n"); // 换行
}
for (i = n - 1; i >= 1; i--) // 从第n-1行到第1行
{
for (j = 1; j <= n - i; j++)
{
printf(" ");
}
for (j = 1; j <= 2 * i - 1; j++)
{
printf("%d", i % 10);
}
printf("\n"); // 换行
}
}
int main()
{
print_rhombus(5); // 调用函数打印一个5行的菱形
return 0;
}
有一序列 2/1,3/2,5/3,8/5,13/8,21/13...求这个数列的前20项之和。
#include <stdio.h>
int main()
{
double a = 2; // 初始化变量a为2
double b = 1; // 初始化变量b为1
double sum = 0; // 求和
for (int i = 1; i <= 20; i++) // 循环20次
{
sum += a / b; // 将a除以b的结果加到sum上
a += b; // 更新a的值,将b加到a上
b = a - b; // 更新b的值,将a减去b
}
printf("%lf", sum); // 输出sum的值,使用%lf格式化字符串表示double类型的值
return 0;
}
函数表达
include <stdio.h>
double series(int n)
{
double a = 2;
double b = 1;
double sum = 0;
for (int i = 1; i <= n; i++)
{
sum += a / b;
a += b;
b = a - b;
}
return sum;
}
int main()
{
int n = 20;
series(n);
printf("%lf", series(n));
return 0;
}