- 7.3
计算两整数的最大数值
#include<stdio.h>
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int a,b;
printf("Input a,b:");
scanf("%d,%d",&a,&b);
printf("max = %d\n",max(a,b));
}
- 7.4
穷举法算正整数的最小公倍数
#include <stdio.h>
int LCM(int a,int b)
{
int i;
for(i=a;i<=a*b;i+=a) //i+=a比i++快速
{
if(i%a==0&&i%b==0)
return i;
}
}
int main()
{
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",LCM(x,y));
}
#include <stdio.h>
int LCM(int a,int b)
{
int i;
for(i=1;i<=b;i++) //i代表a的i倍
{
if(i*a%b==0)
return i*a;
}
}
int main()
{
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",LCM(x,y));
}
- 7.5
计算输出1到n所有数的阶乘值
#include<stdio.h>
int Fact(long i)
{
long p;
if(i==0||i==1)
p=1;
else
p=i*Fact(i-1);
return p;
}
int main()
{
int n,i;
printf("Input n:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("%d! = %ld\n",i,Fact(i));
}
}
- 7.6
计算输出1到n所有数的阶乘值的和
#include<stdio.h>
int Fact(int i)
{
int p;
if(i==0||i==1)
p=1;
else
p=i*Fact(i-1);
return p;
}
int main()
{
unsigned int n,i;
unsigned long sum=0,term;
printf("Input n(n>0):");
scanf("%u",&n);
for(i=1;i<=n;i++)
{
term=Fact(i);
sum+=term;
}
printf("sum = %lu\n",sum);
}
- 7.7
三种方法求最大公约数
主函数
#include<stdio.h>
int main()
{
int x,y;
printf("Input x,y:");
scanf("%d%d",&x,&y);
printf("%d\n",GCD(x,y);
}
子函数
①穷举法
#include<stdio.h>
int GCD(int a,int b)
{
int i,c;
c=a<b?a:b;
for(i=c;i>=1;i--)
{
if(c%i==0 && c%i==0)
return i;
}
}
②欧几里得法
whlie语句实现
#include<stdio.h>
int GCD(int a,int b)
{
int r,c;
if(a<b)
{
c=a;
a=b;
b=c;
}
r=a%b;
while(r!=0)
{
a=b;
b=r;
r=a%b;
}
return b;
}
do-whlie语句实现
#include<stdio.h>
int GCD(int a,int b)
{
int r,c;
if(a<b)
{
c=a;
a=b;
b=c;
}
do{r=a%b;
a=b;
b=r;
}while(r!=0)
return a;
}
③递归法
#include <stdio.h>
int GCD(int a,int b)
{
if(a%b==0)
return b;
else
return GCD(b,a%b);
}
#include <stdio.h>
int GCD(int a,int b)
{
if(a%b==0)
return a;
else if(a>b)
return GCD(a-b,b);
else
return GCD(a,b-a);
}
- 7.8
水手跟椰子
#include <stdio.h>
int yz(int i);
int main()
{
int n,sum = 0;
for(int i = 1; i<10; i++)
{
if (((5 * i) + 1) % 4 == 0 )
{
n = i;
break;
}
else
continue;
}
printf("第五个人每堆椰子数至少为:%d\n",n);
sum = 5 * n +1; //第五个人拿到椰子总数
printf("第5个人拿到时椰子总数为:%d\n",sum);
for(int i = 4; i>0; i--)
{
sum = yz(sum);
printf("第%d个人拿到时椰子总数为:%d\n",i,sum);
}
printf("所以这堆椰子原来至少有:%d个",sum);
return 0;
}
int yz(int i)
{
return i * 5 / 4 + 1;
}
- 7.9
五个人的年纪
#include <stdio.h>
int old(int i)
{
if(i==1) return 10;
else return(old(i-1)+2);
}
int main()
{
int i=5;
printf("第%d个人的年龄是%d",i,old(i));
}
- 7.10
魔术师猜三位数
#include <stdio.h>
int main()
{
int a,b,c,total;
scanf("%d",&total);
for(c=0;c<=9;c++)
{
for(b=0;b<=9;b++)
{
for(a=1;a<=9;a++)
{
if(total==122*a+212*b+221*c)
{
printf("%d",a*100+b*10+c);
return 0;
}
}
}
}
printf("你算错了!");
}