一点蓝桥杯题目d1-爱代码爱编程
既约分数
问题描述:
如果一个分数的分子和分母的最大公约数是 1,这个分数称为既约分数。例如,1/2 , 2 , 5/13 等都是既约分数。
请问在分子和分母都是 1 到 2023之间的整数范围里,共有多少个既约分数(包括 1 和 2023)?
题目分析:
暴力求解找出分子分母除1外没有最大公约数的分数。注意运用函数解决问题的思路。
#include <stdio.h>
#include <stdlib.h>
int Gcd(int a,int b)
{
if(a%b==0)
return b;
else
return Gcd(b,a%b);
}
int main()
{
int n = 2023;
int count = 0;
int i = 1,j=1;
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
if(Gcd(i,j)==1)
{
count++;
}
}
}
printf("%d\n",count);
return 0;
}
输出结果:
2489687
(改编自蓝桥杯 既约分数)
平面分割
问题描述:20个圆和20条直线能将平面分为几部分?(注意:一个圆可以把一平面分为两部分,而一条直线也同样能将一个平面分为两部分)
求解思路:
先自己列出几个例子,找出规律;并实现递归算法;
可以列出1个圆与0条直线和0个圆与1条直线的情况平面都被分为2部分,用<x,y> 表示x个圆与y条直线,create分割函数,<1,1>时,结果为4;<1,2>时,结果为8;<2,1>时,结果为6;<2,0>时,结果为4;<0,2>时,结果为4;<2,2>时结果为12;由此发现规律。
#include <stdio.h>
#include <stdlib.h>
int Split(int circle,int line){
if(circle<0||line<0){
printf("Please input correct value.\n");
return 0;
}
if((circle==1&&line==0)||(circle==0&&line==1)) return 2;
else if(circle==1&&line==1) return 4;
else if(circle==0||line==0){
if(circle==0){
return 2*line;
}
else{
int j=0,sum=1;
for(j=0;j<circle;j++){
sum*=2;
}
return sum;
}
}
else{
if(line>=2)
return 2*Split(circle,line-1);
else if(circle>=2)
return Split(circle-1,line)+Split(circle-2,line);
}
printf("There has an error.\n");
return 0;
}
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m)){
printf("%d\n",Split(n,m));
}
return 0;
}
这个没找题目提交,也有可能不太对,请大家指正~感谢各位喽!