int main(){
//数组c为分子数组,数组d为分母数组,借助temp数组来表示前n个分数中所有分子和分母占用的位置,采用直接映射方法
int c[3001]={0},d[3001]={0},temp[10000]={0};
//初始化前两个分数,方便进行后面分数的计算
c[1]=1;c[2]=3;d[1]=2;d[2]=5;
//同时要对temp进行更新
temp[c[1]]=c[1];temp[c[2]]=c[2];temp[d[1]]=d[1];temp[d[2]]=d[2];
int n;
cout<<"请输入位数n:";
cin>>n;
//用两个变量来存储最大分数的分子和分母
int max_c=1,max_d=2;
for(int i=3;i<=n;i++){
for(int j=1;j<10000;j++){
if(temp[j]==0){
//找到第一个没有被占用的位置对应的分子或分母
c[i]=j;
//及时更新temp占用位置
temp[c[i]]=c[i];
//找到第一个之后就结束循环,不再遍历
break;
}
}
//推分母
d[i]=c[i]+i;
//记得及时更新temp占用情况
temp[d[i]]=d[i];
//比较出最大的那个分数
if(max_c*d[i]<max_d*c[i]){
max_c=c[i];
max_d=d[i];
}
}//for ,i
//输出全部的n个分数
/*
for(int i=1;i<=n;i++){
cout<<c[i]<<"/"<<d[i]<<" ";
}
*/
//输出第n个分数
cout<<c[n]<<"/"<<d[n]<<endl;
//输出最大的那个分数
cout<<max_c<<"/"<<max_d<<endl;
return 0;
}
分数数列--c++
最新推荐文章于 2024-07-08 22:12:26 发布