1.//输入10个整数,求其中正数的个数及平均值,精确到小数点后两位
#include<stdio.h>
int main()
{
int n = 0;
int a;
int num=0; int sum=0; float avg;
while (n < 10)
{
scanf("%d", &a);
if (a > 0)
{
num++;
}
sum += a;
n++;
}
avg = sum / 10.0;
printf("正数:%d,sum=%d,平均值:%.2f", num, sum,avg);
return 0;
}
2.//已知一首项大于0的等差数列的前四项和为26,前四项的积为880,求这数列 /* a1,a2,a3,a4: a1+a2+a3+a4=26;4a1+6d=26; a1*a2*a3*a4=880;? 等差数列:d,a1>0-->分析,d>0 用枚举法: 4a+6d=26 0<4a<26-->0<a<7 d!=0,d>=1 0<4a<=20-->0<a<=5 a>0,a>=1 0<6d<=22-->0<d<=3 */
#include <stdio.h>
int main()
{
int a1, d;
for (a1 = 1; a1 <= 5; ++a1)
for (d = 1; d <= 3; ++d)
{
if (4 * a1 + 6 * d == 26 && a1 * (a1 + d) * (a1 + 2 * d) * (a1 + 3 * d) == 880)
goto out;
}
out:
printf("首项:%d,公差:%d\n", a1, d);
return 0;
}
3.//使用格里高利公式求π的近似值,要求精确到最后一项的绝对值小于10^(-5)。(若这一项加进去,则共50001项) /* π=4*(1-1/3+1/5-1/7+1/9......) |第i项|=1/(2i-1)<0.00001-->i>50000,i=50001 */
#include<stdio.h>
int main()
{
int i=1;
double num;
double sum=0;
for (i = 1; i<=50001; i++)
{
num = 1.0 / (2 * i - 1);
if (i % 2 == 0)
sum = sum - num;
else
sum = sum + num;
}
printf("π的值为:%lf", 4 * sum);
return 0;
}
4.//统计一个整数的位数 /* 正整数:99 0 负整数:-99 */
#include<stdio.h>
int main()
{
int n; int num=1;
scanf("%d", &n);
if (n < 0) n = -n;
while (n / 10 != 0)
{
num++;
n = n / 10;
}
printf("整数位数:%d\n", num);
return 0;
}
5.//求1! + 2! + …. + 100! /* (n+1)!=(n)!*(n+1) */
#include<stdio.h>
int main()
{
int i = 1;//计数
double n=1,sum=0;//注意:double表示范围比long大
for (i; i <= 100; i++)
{
n = n * i;
printf("%e\n", n);//科学计数法表示
sum = sum + n;
}
printf("%e\n", sum);
return 0;
}
6.//猴子吃桃 /* 有一只猴子,第1天摘了 m 个桃子?,当即吃了一半,但还觉得不过瘾?,就又多吃了一个。 第 2 天又将剩下的桃子吃掉一半,还是觉得不过瘾,就又多吃了 2 个。 以后每天早上都吃了前一天剩下的一半加天数个(例如,第5天吃了前一天剩下的一半加 5 个)。 到第n天早上再想吃的时候,就只剩下一个桃子了。 求:第一天的桃子个数 m 假设:第k天开始有f(k)个,则第k-1天开始有f(k-1)个; ?? ? ?f(k)=f(k-1)/2-(k-1); ?? ? ?f(k-1)=2(f(k)+k-1); ?? ? ?如此,由第n天往第一天去推,给出n和第n天的数(此处默认为1),即可推得第一天 */
#include<stdio.h>
int main()
{
int i,n;
int total = 1;
scanf("%d", &n);//默认第n天开始有1个
for (i = n - 1; i > 0; i--)
{
total = 2 * (total + i);
}
printf("第一天有:%d\n", total);
return 0;
}
|