本题要求计算给定的一系列正整数中奇数的和。
输入格式:
输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表示输入结束,该数字不要处理。
输出格式:
在一行中输出正整数序列中奇数的和。
输入样例:
8 7 4 3 70 5 6 101 -1
结尾无空行
输出样例:
116
#include <stdio.h>
int main()
{
int n,sum=0;
do{
scanf("%d",&n);
if(n%2>0){
sum=sum+n;
}
}while(n>0);
printf("%d",sum);
}
已知函数e x可以展开为幂级数
现给定一个实数x,要求利用此幂级数部分和求e x 的近似值,求和一直继续到最后一项的绝对值小于0.00001。
输入格式:
输入在一行中给出一个实数x∈[0,5]。
输出格式:
在一行中输出满足条件的幂级数部分和,保留小数点后四位。
输入样例:
1.2
结尾无空行
输出样例:
3.3201
#include <math.h>
int main()
{
double i=1;
float x;
double e=1;
double esp=1;
double de=1;
scanf("%f",&x);
if(x<=5&&x>=0){
do{
de=de*i;
e=e+pow(x,i)/de;
esp=pow(x,i)/de;
i++;
}while(fabs(esp)>=0.00001);
printf("%.4f",e);
}
return 0;
}
本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+… 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围
#include <stdio.h>
int main()
{
int n,i;
double f=1,m=2,sum=0,temp;
scanf("%d",&n);
for(i=1;i<=n;i++){
sum=sum+m/f;
temp=m;
m=m+f;
f=temp;
}
printf("%.2f\n",sum);
}
给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。
输入格式:
输入在一行中给出不超过9的正整数a和n。
输出格式:
在一行中按照“s = 对应的和”的格式输出。
#include <stdio.h>
#include <math.h>
int main()
{
int a,n,i,j;
double sum=0,s=0;
scanf("%d %d",&a,&n);
if(a<=9&&n<=9){
for(i=0;i<n;i++){
s=a*pow(10,i)+s;
sum=sum+s;
}
printf("s = %.0f\n",sum);
}
}
将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?
输入格式:
输入在一行中给出待换的零钱数额x∈(8,100)。
输出格式:
要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。
#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
int i,j,k,total,count=0;
if(x>8&&x<100){
for(i=x/5;i>=1;i--){
for(j=((x-5*i)/2);j>=1;j--){
k=x-5*i-2*j;
if(k>=1){
total=i+j+k;
count++;
printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n",i,j,k,total);
}
}
}
printf("count = %d",count);
}
return 0;
}
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。
本题要求编写程序,计算所有N位水仙花数。
输入格式:
输入在一行中给出一个正整数N(3≤N≤7)。
输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。
#include <stdio.h>
int pow(int a,int b){
int i,t=a;
for(i=1;i<b;i++){
a=a*t;
}
return a;
}
int main()
{
int a=100,b=1000,c=10000,d=100000,e=1000000;
int n;
scanf("%d",&n);
if(n==3){
while(a<1000){
if(a==pow(a%10,3)+pow(a/10%10,3)+pow(a/100,3)) printf("%d\n",a);
a++;
}
}else if(n==4){
while(b<10000){
if(b==pow(b%10,4)+pow(b/10%10,4)+pow(b/100%10,4)+pow(b/1000,4)) printf("%d\n",b);
b++;
}
}else if(n==5){
while(c<100000){
if(c==pow(c%10,5)+pow(c/10%10,5)+pow(c/100%10,5)+pow(c/1000%10,5)+pow(c/10000,5)) printf("%d\n",c);
c++;
}
}else if(n==6){
while(d<1000000){
if(d==pow(d%10,6)+pow(d/10%10,6)+pow(d/100%10,6)+pow(d/1000%10,6)+pow(d/10000%10,6)+pow(d/100000,6))
printf("%d\n",d);
d++;
}
}else if(n==7){
while(e<10000000){
if(e==pow(e%10,7)+pow(e/10%10,7)+pow(e/100%10,7)+pow(e/1000%10,7)+pow(e/10000%10,7)+pow(e/100000%10,7)+pow(e/1000000,7))
printf("%d\n",e);
e++;
}
}
return 0;//问题:为什么pow函数要自己写才会在n==7时不会运行超时。
}
本题要求两个给定正整数的最大公约数和最小公倍数。
输入格式:
输入在一行中给出两个正整数M和N(≤1000)。
输出格式:
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。
#include <stdio.h>
int main()
{
int min,max;
int m=0,n=0,r;
int temp_1,temp_2;
if(m<=1000&&n<=1000){
scanf("%d %d",&m,&n);
}
temp_1=m;temp_2=n;
r=m%n;
while(r!=0){
m=n;
n=r;
r=m%n;
}
max=n;min=temp_1*temp_2/max;
printf("%d %d",max,min);
return 0;
}
皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?
输入格式:
输入在一行中给出两个非负整数,分别是皮球的初始高度和n,均在长整型范围内。
输出格式:
在一行中顺序输出皮球第n次落地时在空中经过的距离、以及第n次反弹的高度,其间以一个空格分隔,保留一位小数。题目保证计算结果不超过双精度范围。
#include <stdio.h>
int main(){
int n;//s为在空中所经历的路程;h为初始高度。
int i;
double s=0,h;
scanf("%lf %d",&h,&n);
if(h>0&&n>0){
for(i=1;i<=n;i++){
s=s+h;
h=0.5*h;
s=s+h;
}
s=s-h;
printf("%.1f %.1f",s,h);
}else if(n==0){
s=0;
h=0;
printf("%.1f %.1f",s,h);
}else if(h==0){
s=h;
printf("%.1f %.1f",s,h);
}
}
本题要求编写程序,打印一个高度为n的、由“*”组成的正菱形图案。
输入格式:
输入在一行中给出一个正的奇数n。
输出格式:
输出由n行星号“*”组成的菱形,如样例所示。每个星号后跟一个空格
#include <stdio.h>
int main(){
int n,i,j,h,count=0;
scanf("%d",&n);
h=(n+1)/2;
if(n%2!=0){
for(i=1;i<=h;i++){
for(j=1;j<=h-i;j++){
printf(" ");
}
for(j=0;j<2*i-1;j++){//实现每步都加2
printf("* ");
}
printf("\n");
}
}
for(i=1;i<h;i++){
for(j=0;j<i;j++){
printf(" ");
}
for(j=2*(h-i)-1;j>0;j--){//实现每步都加2
printf("* ");
}
printf("\n");
}
return 0;
}
一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个。到第N天早上想再吃时,见只剩下一个桃子了。问:第一天共摘了多少个桃子?
输入格式:
输入在一行中给出正整数N(1<N≤10)。
输出格式:
在一行中输出第一天共摘了多少个桃子。
#include <stdio.h>
int main(){
int n;//一共吃多少天
scanf("%d",&n);
int sum=1,i;
if(n>1&&n<=10){
for(i=1;i<n;i++){
sum=(sum+1)*2;
}
printf("%d",sum);
return 0;
}
}