bayd1602 2023-03-28 22:30 采纳率: 100%
浏览 16
已结题

遍历求符合条件的值c语言问题

在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果。如对某一观点表示支持的有 1498 人,反对的有 902 人,那么赞同与反对的比例可以简单的记为1498:902。

不过,如果把调查结果就以这种方式呈现出来,大多数人肯定不会满意。因为这个比例的数值太大,难以一眼看出它们的关系。对于上面这个例子,如果把比例记为 5:3,虽然与真实结果有一定的误差,但依然能够较为准确地反映调查结果,同时也显得比较直观。

现给出支持人数 A
,反对人数 B,以及一个上限 L
,请你将 A
比 B
化简为 A′
比 B′
,要求在 A′
和 B′
均不大于 L
且 A′
和 B′
互质(两个整数的最大公约数是 1)的前提下,A′/B′≥A/B
且 A′/B′−A/B
的值尽可能小。

输入数据
输入共一行,包含三个整数 A,B,L,每两个整数之间用一个空格隔开,分别表示支持人数、反对人数以及上限。

输出数据
输出共一行,包含两个整数 A′
,B′
,中间用一个空格隔开,表示化简后的比例。

#include<stdio.h>
int f(int a,int b);
int main(){
    long long int a,b;int a1,b1,l,i=0,t;double d[1000],min;
    scanf("%ld%ld%d",&a,&b,&l);
    for(a1=1;a1<=l;a1++){
        for(b1=1;b1<=l;b1++)
    if(f(a1,b1)==1&&(double)a/b<=(double)a1/b1){d[i]=(double)a1/b1-(double)a/b;i++;
    }
    }
    for(t=0;t<=i;t++){min=d[0];if(d[t]<min)min=d[t];
    }
    for(a1=1;a1<=l;a1++){
        for(b1=1;b1<=l;b1++)
    if(f(a1,b1)==1&&(double)a/b<=(double)a1/b1&&(double)a1/b1-(double)a/b==min){printf("%d %d",a1,b1);
    }
    }
    return 0;
}

int f(int a,int b)
{
    int t;
    if(a<b)
    {
        t=a;a=b;b=t;
    }
    while(a%b)
    {
        t=b;
        b=a%b;
        a=t;
    }
    return b;
}


为啥我输入有的数据没有输出

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-03-30 15:31
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 你可以看下这个问题的回答https://ask.csdn.net/questions/165180
    • 这篇博客你也可以参考下:猜单词游戏。计算机随机产生一个单词,打乱字母顺序,供玩家去猜 a.准备一组单词,随机抽取一个b.将抽取的单词作为答案,打乱字母顺序,显示给玩家,供其猜测c.猜测错误继续猜测或以空字符串.
    • 除此之外, 这篇博客: 假设以两个元素依值递增有序排列的顺序表A和B 分别表示两个集合(同一表中的元素值各不相同),现要求另辟空间构成一个顺序表C,其元素为A和B元素的交集,且表C中的元素也是依值递增有序排列。中的 假设以两个元素依值递增有序排列的顺序表A和B 分别表示两个集合(同一表中的元素值各不相同),现要求另辟空间构成一个顺序表C,其元素为A和B元素的交集,且表C中的元素也是依值递增有序排列。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
      # include <stdio.h>
      # include <stdlib.h>
      # define initsize 20//初始分配量
      # define LISTINCREMENT 5//分配增量
      typedef int ElemType;
      typedef struct
      {
      	ElemType * elem;
      	int length;
      	int listsize;
      }SqList;
      void IntiList(SqList &L,int n)//建立一个表长为n的顺序表
      {
      	ElemType *p;
      	L.elem = (ElemType *)malloc(initsize*sizeof(ElemType));
      	if(!L.elem)
      	{
      		printf("分配失败");
      	}
      	printf("请依次输入顺序表的元素(数据元素依值递增):\n");
      	for(p = L.elem;p < L.elem+n;p++)
      	{
      		scanf("%d",p);
      	}
      	L.length = n;
      	L.listsize = initsize;
      }
      void PrintList(SqList L)//输出顺序表
      {
      	ElemType *p;
      	printf("输出顺序表中的元素\n");
      	for(p=L.elem;p<L.elem+L.length;p++)
      	{
      		printf("%d\t",*p);
      	}
      	printf("\n");
      }
      void IntiList_NULL(SqList &L)//建立一个空的顺序表
      {
      	L.elem = (ElemType *)malloc(initsize*sizeof(ElemType));
      	if(!L.elem)
      	{
      		printf("分配失败");
      	}
      	L.length = 0;
      	L.listsize = initsize;
      }
      void ListInsert(SqList &L,int i,ElemType e)//在顺序表中第i个位置插入元素e
      {
      	ElemType *p,*q,*newbase;
      	q=L.elem+i-1;//q为插入位置
      	if(i<1||i>L.length+1)//i值不合法
      	{
      		printf("插入元素位置不合法\n");
      	}
      	if(L.length>=L.listsize)//当前储存空间已满,增加分配
      	{
      		newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
      		if(!newbase)
      		{
      			printf("分配失败");
      		}
      		L.elem=newbase;
      		L.listsize+=LISTINCREMENT;
      	}
      	for(p=L.elem+L.length-1;p>=q;p--)//插入位置及之后元素右移
      	{
      		*(p+1)=*p;
      	}
      	*q=e;
      	++L.length;
      }
      void find_intersection(SqList La,SqList Lb,SqList &Lc)//找出顺序表La和Lb中元素的交集,并按依值递增的顺序放入顺序表Lc中
      {
      	int i=0;
      	ElemType *pa,*pb;
      	for(pa=La.elem;pa<La.elem+La.length;pa++)
      	{
      		for(pb=Lb.elem;pb<Lb.elem+Lb.length;pb++)
      		{
      			if(*pb==*pa)
      			{
      				i++;
      				ListInsert(Lc,i,*pa);
      			}
      		}
      	}
      }
      int main()
      {
      	int n1,n2;
      	SqList La,Lb,Lc;
      	printf("请输入要建立的顺序表La的长度n1:\n");
      	scanf("%d",&n1);
      	printf("顺序表La\n");
      	IntiList(La,n1);
      	printf("请输入要建立的顺序表Lb的长度n2:\n");
      	scanf("%d",&n2);
      	printf("顺序表Lb\n");
      	IntiList(Lb,n2);
      	IntiList_NULL(Lc);
      	find_intersection(La,Lb,Lc);
      	PrintList(Lc);
      	return 0;
      }
      

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月23日
  • 已采纳回答 10月15日
  • 创建了问题 3月28日

悬赏问题

  • ¥18 关于#贝叶斯概率#的问题:这篇文章中利用em算法求出了对数似然值作为概率表参数,然后进行概率表计算,这个概率表是怎样计算的呀
  • ¥15 Android Navigation: 某XDirections类不能自动生成
  • ¥20 C#上传XML格式数据
  • ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下
  • ¥100 单片机hardfaulr
  • ¥20 手机截图相片分辨率降低一半
  • ¥50 求一段sql语句,遇到小难题了,可以50米解决
  • ¥15 速求,对多种商品的购买力优化问题(用遗传算法、枚举法、粒子群算法、模拟退火算法等方法求解)
  • ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)
  • ¥15 虚拟机检测,可以是封装好的DLL,可付费