1.编程从键盘任意输入两个时间(例如4时55分和1时25分),计算并输出这两个时间之间的间隔。要求不输出时间差的负号。

#include<stdio.h> int main() { int hour1,minute1,hour2,minute2,hour3,minute3,time,time1,time2; printf("Input time one(hour, minute):"); scanf("%d,%d",&hour1,&minute1); printf("Input time two(hour, minute):"); scanf("%d,%d",&hour2,&minute2); time1=hour1*60+minute1; time2=hour2*60+minute2; if(time1>time2) time=time1-time2; else time=time2-time1; hour3=time/60; minute3=time%60; printf("%d hour %d minute ",hour3,minute3); return 0; }
2.
设capital是最初的存款总额(即本金),rate是整存整取的存款年利率,n 是储蓄的年份,deposit是第n年年底账号里的存款总额。已知如下两种本利之和的计算方式:
-
按复利方式计息的本利之和计算公式为:deposit = capital * (1 + rate) n
-
按普通计息方式计算本利之和的公式为:deposit = capital * (1 + rate * n)
已知银行整存整取不同期限存款的年息利率分别为:
存期1年,利率为 0.0225
存期2年,利率为 0.0243
存期3年,利率为 0.0270
存期5年,利率为 0.0288
存期8年,利率为 0.0300
若输入其他年份,则输出"Error year!"

#include<stdio.h> #include<math.h> int main() { int flag=1; int year; double capital,rate,deposit; char interest; printf("Input capital, year:"); scanf("%lf,%d,&capital",&capital,&year); switch(year) { case 1:rate=0.0225; break; case 2:rate=0.0243; break; case 3:rate=0.0270; break; case 5:rate=0.0288; break; case 8:rate=0.0300; break; default:flag=0; } printf("Compound interest (Y/N)?"); scanf(" %c",&interest); if((interest=='y'||interest=='Y')&&flag) { deposit=capital*pow(1+rate,year); printf("rate = %.4f, deposit = %.4f ",rate,deposit); } else if((interest=='n'||interest=='N')&&flag) { deposit=capital*(1+rate*year); printf("rate = %.4f, deposit = %.4f ",rate,deposit); } else { printf("Error year! "); } return 0; }
3.
美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方是一个4位数。我年龄的4次方是一个6位数。这=10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”请你编程算出他当时到底有多年轻。

#include <stdio.h> #include <stdlib.h> #include <math.h> int tenBit(int n,int *a); int main() { for(int x=10;x<=22;++x) { int a[10]={0,1,2,3,4,5,6,7,8,9}; int d = tenBit(x*x*x,a)+tenBit(x*x*x*x,a); if(d==10){ printf("age=%d ",x); break; } } return 0; } int tenBit(int n,int *a){ int cnt =0; while(n){ for(int i=0;i<10;++i){ if(n%10==a[i]){ a[i]=-1; cnt++; } } n/=10; } return cnt; }
4.
化简分数的最简分数(寻找分子分母的最大公约数)

#include<stdio.h> int Gcd(int a,int b); int main() { int a; int b; printf("Input m,n:"); scanf("%d,%d",&a,&b); if (a<1||a>10000||b<1||b>10000) { printf("Input error! "); } else printf("%d/%d ",a/Gcd(a,b),b/Gcd(a,b)); getchar(); getchar(); return 0; } int Gcd(int a,int b) { int max=1; int i; int n = a < b ? a : b; for (i = 1; i <= n; ++i) { if (a % i == 0 && b % i == 0 ) { if(max < i) { max = i; } } } return max; }
5.
从键盘任意输入一个整数n,编程计算并输出1~n之间的所有素数之和。
函数原型:int IsPrime(int x);
函数功能:判断x是否是素数,若函数返回0,则表示不是素数,若返回1,则代表是素数

#include<stdio.h> int IsPrime(int x); int main() { int x,i; int sum=0; printf("Input n:"); scanf("%d",&x); if(x<2) { printf("sum=%d ",sum); } else { for(i=2;i<=x;i++) { if(!IsPrime(i)) { sum+=i; } } printf("sum=%d ",sum); } getchar(); getchar(); return 0; } int IsPrime(int x) { int i; for (i=2;i<x;i++) { if(x%i==0) { return 1; break; } } return 0; }
6.
已知一个集合A,对A中任意两个不同的元素求和,若求得的和仍在A内,则称其为好数对。例如,集合A={1 2 3 4},1+2=3,1+3=4,则1,2和1,3 是两个好数对。编写程序求给定集合中好数对的个数。

#include<stdio.h> #define SIZE 1000 int Good(int a[], int m,int n); int main() { int i; int a[SIZE]; int n; int m=0; scanf("%d",&n); for (i=0;i<n;i++) { scanf("%d",&a[i]); } printf("%d",Good(a,m,n)); return 0; } int Good(int a[], int m,int n) { int i,j,k; for(i=0;i<n-1;++i) { for (j=i+1;j<n;j++) { for(k=0;k<n;k++) { if(a[i]+a[j]==a[k]) m++; } } } return m; }
7.
猴子吃桃问题,反向递归
法一:

#include<stdio.h> int Monkey(int n, int x); int main() { int n,x=1; printf("Input days n:"); scanf("%d",&n); printf("x=%d ",Monkey(n,x)); } int Monkey(int n, int x) { if(n==1) { return x; } else { return Monkey((n-1),2*(x+1)); } }
法二:

#include <stdio.h> int getPeachNumber(n) { int num; //定义所剩桃子数 if(n==10) { return 1; //递归结束条件 } else { num =(getPeachNumber(n+1)+1)*2;//这里是不应该用递归呢? printf("第%d天所剩桃子%d个 ", n, num); //天数,所剩桃子个数 } return num; } int main() { int num = getPeachNumber(1); printf("猴子第一天摘了:%d个桃子。 ", num); return 0; }
8.
据说,鲁智深一天中午匆匆来到开封府大相国寺,想蹭顿饭吃,当时大相国寺有99个和尚,只做了99个馒头。智清长老不愿得罪鲁智深,便把他安排在一个特定位置,之后对所有人说: 从我开始报数(围成一圈),第5个人可以吃到馒头(并退下) ,按此方法,所有和尚都吃到了馒头,唯独鲁智深没有吃上。请问他在那个位置? 能否借鉴筛法求出剩下的最后一个人的位置?

#include <stdio.h> int main() { int a[100]={0}; int bread; int cnt=0;int i=0; for (bread=99; bread>0; ++i,i%=100) { if(a[i]==0) { cnt++; } if (cnt==5) { bread--; cnt=0; a[i]=-1;//改变已经分到的状态 } } for(i=0;i<100;i++) { if (a[i]==0) printf("The result is %d: ",i+1); } return 0; }
9.
Squeeze函数的功能是删除字符串s中所出现的与变量c相同的字符。例如,输入为:abcdef↙c↙输出为:abdef

#include <stdio.h> #include <string.h> void Squeeze(char *s, char c); int main() { char a[80], c, *s; s = a; gets(a); scanf("%c",&c); Squeeze(s, c); printf("%s ", s); return 0; } void Squeeze(char *s, char c) { int i, j; for (i = j = 0; s[i] != '