69,393
社区成员
发帖
与我相关
我的任务
分享
菜鸟版,呵呵
#include <stdio.h>
int main()
{
int n,result[10000][2],count=0,i,j,a,b,t;
printf("Please input the N? \n");
scanf("%d",&n);
if(n<1 || n>100)
{
printf("input err!\n");
return 0;
}
for(i=1;i<=n-1;i++) //求出所有非0、1的最简可能组合(含相等值)
for(j=i+1;j<=n;j++)
{
a=j;
b=i;
while(b!=0)
{
t=a%b;
a=b;
b=t;
}
result[count][0]=i/a;
result[count][1]=j/a;
count++;
}
for(i=0;i<count-1;i++) //非递减排序
for(j=i+1;j<count;j++)
{
if((double)result[i][0]/result[i][1]>(double)result[j][0]/result[j][1])
{
a=result[i][0];
result[i][0]=result[j][0];
result[j][0]=a;
a=result[i][1];
result[i][1]=result[j][1];
result[j][1]=a;
}
}
for(i=0;i<count-1;i++) //去除重复值
{
if((double)result[i][0]/result[i][1]==(double)result[i+1][0]/result[i+1][1])
{
for(j=i;j<count-1;j++)
{
result[j][0]=result[j+1][0];
result[j][1]=result[j+1][1];
}
i--;
count--;
}
}
printf("0/1 "); //输出
for(i=0;i<count;i++)
printf("%d/%d ",result[i][0],result[i][1]);
printf("1/1\n");
printf("There were %d fractions.\n",count+2);
return 0;
}
#include <stdio.h>
int pos[1024];
//判断是否互质
int huzhi(int m,int n)
{
int big = (m>n)?m:n;
int small = m+n-big;
int tmp;
while(small>1)
{
tmp = small;
if((small=big%small) == 0)
return 0;
big = tmp;
}
return 1;
}
void bubble_sort(double *p,int num)
{
int i,j;
int tmp;
for(i=0;i<num-1;i++)
for(j=i+1;j<num;j++)
{
if(p[i]>p[j])
{
//对分数排序
double a;
a = p[i];
p[i] = p[j];
p[j] = a;
//对数组下标排序
tmp = pos[i];
pos[i] = pos[j];
pos[j] = tmp;
}
}
}
void main()
{
int n,i,j,cnt=0;
int parent[1024],child[1024];
double fra[1024];
printf("please input N:");
scanf("%d",&n);
if(n<1 || n>100)
{
printf("input err!\n");
return;
}
parent[cnt] = 1;
child[cnt] = 0;
fra[cnt] = 0;
cnt++;
parent[cnt] = 1;
child[cnt] = 1;
fra[cnt] = 1;
cnt++;
//罗列每个分数
for(i=2;i<=n;i++)
{
for(j=1;j<i;j++)
{
if(huzhi(i,j) == 1)
{
parent[cnt] = i;
child[cnt] = j;
fra[cnt] = j/(double)i;
cnt++;
}
}
}
//初始化数组下标
for(i=0;i<cnt;i++)
{
pos[i]=i;
}
//排序
bubble_sort(fra,cnt);
for(i=0;i<cnt;i++)
{
printf("%d/%d ",child[pos[i]],parent[pos[i]]);
if(i%3 == 2)
printf("\n");
}
}
#include <stdio.h>
//判断是否互质
int huzhi(int m,int n)
{
int big = (m>n)?m:n;
int small = m+n-big;
int tmp;
while(small>1)
{
tmp = small;
if((small=big%small) == 0)
return 0;
big = tmp;
}
return 1;
}
void main()
{
int n,i,j,cnt=0;
int parent[1024],child[1024];
double fra[1024];
printf("please input N:");
scanf("%d",&n);
if(n<1 || n>100)
{
printf("input err!\n");
return;
}
parent[cnt] = 1;
child[cnt] = 0;
cnt++;
parent[cnt] = 1;
child[cnt] = 1;
cnt++;
//罗列每个分数
for(i=2;i<=n;i++)
{
for(j=1;j<i;j++)
{
if(huzhi(i,j) == 1)
{
parent[cnt] = i;
child[cnt] = j;
cnt++;
}
}
}
for(i=0;i<cnt;i++)
{
printf("%d/%d ",child[i],parent[i]);
if(i%3 == 2)
printf("\n");
}
}
#include<stdio.h>
struct node
{
int a,b;
}ans[10000],a,b;
int len;
int n;
void make_sequence(struct node a, struct node b)
{
struct node tmp;
if(a.b + b.b > n) return;
tmp.a=a.a + b.a;
tmp.b=a.b + b.b;
make_sequence(a, tmp);
ans[len++]=tmp;
make_sequence(tmp, b);
}
int main()
{
int i;
puts("Please input the N?");
scanf("%d",&n);
if(n<1||n>100)
{
puts("Invalidate input!");
return 0;
}
a.a=0,a.b=1;
b.a=1,b.b=1;
len=1;
ans[0]=a;
make_sequence(a, b);
ans[len++]=b;
for(i = 0; i< len; i++)
printf("%d/%d ",ans[i].a, ans[i].b);
printf("\nThere were %d fractions.\n",len);
return 0;
}