c语言知道a*b的积,求a+b和的最大值

如题所述

首先,这要涉及到数学问题,假设,a,b都是正整数,已知a*b,求a+b的最大值,要用穷举法,利用计算机程序是最好不过的了。
我们先假定,这个乘积是100,然后,假设a从1递增到50(只递增到这个积的一半就可以了),这时如果发现有能够使a*b=100那么再将a+b的和与默认的最大值比较,如果小于默认值那就不做处理,大于默认值就自动将默认值改成这个最大值。大体思想就是这样,下面看下程序怎么实现:(PS:你回去验证下这个程序可行性,不行的话再告知我,我再做修改,这个只是程序的算法)
#include<stdio.h>
#define
N
100
//如果你想换个数字,那就在这里改下,再编译一次就可以了
int
main
(void)
{
int
sum,a,b,c;
c=(int)N/2;
//括号里面的int是强制类型转换
sum=1;
for(a=1;a<=c;a++)
{
b=(int)N/a;
if(a*b==N)
//如果a*b与N不相等那就不用再计算a+b了,例如
【a=3时,b=(int)100/3=33,此时a*b不等于100,那就说明a=3不可以使得有相应的b使a*b=N】
if(sum<a+b)
sum=a+b;
}
printf("a+b的最大值为:%d\n",sum);
return
(0);
}
程序的结果应该是101,但是for
循环一直到a=50时之后结束,你可以验证下:在return
(0);
前面加上这两条语句就可以检查a,b的值是多少了:
printf("此时a的值为:%d",a);
printf("此时b的值为:%d",b);
当然,有些编译器不能识别汉字,你可以用拼音代替,记得我们上大学那会用的最多C语言编译工具就是TC,TC就不能识别汉字。
PS:
一楼给的是直接答案,如果a,b确实都是正整数,那么已知a*b,a+b的最大值一定是a*b+1,但是这里要用计算机算出来。。。
二楼给的答案似乎理解错了LZ的意思了,还有,你的程序用到的sum未定义,肯定过不了编译器的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-01
首先,这要涉及到数学问题,假设,a,b都是正整数,已知a*b,求a+b的最大值,要用穷举法,利用计算机程序是最好不过的了。
我们先假定,这个乘积是100,然后,假设a从1递增到50(只递增到这个积的一半就可以了),这时如果发现有能够使a*b=100那么再将a+b的和与默认的最大值比较,如果小于默认值那就不做处理,大于默认值就自动将默认值改成这个最大值。大体思想就是这样,下面看下程序怎么实现:(PS:你回去验证下这个程序可行性,不行的话再告知我,我再做修改,这个只是程序的算法)
#include<stdio.h>
#define N 100 //如果你想换个数字,那就在这里改下,再编译一次就可以了
int main (void)
{
int sum,a,b,c;
c=(int)N/2; //括号里面的int是强制类型转换
sum=1;
for(a=1;a<=c;a++)
{
b=(int)N/a;
if(a*b==N) //如果a*b与N不相等那就不用再计算a+b了,例如 【a=3时,b=(int)100/3=33,此时a*b不等于100,那就说明a=3不可以使得有相应的b使a*b=N】
if(sum<a+b) sum=a+b;
}
printf("a+b的最大值为:%d\n",sum);
return (0);
}

程序的结果应该是101,但是for 循环一直到a=50时之后结束,你可以验证下:在return (0);
前面加上这两条语句就可以检查a,b的值是多少了:
printf("此时a的值为:%d",a);
printf("此时b的值为:%d",b);
当然,有些编译器不能识别汉字,你可以用拼音代替,记得我们上大学那会用的最多C语言编译工具就是TC,TC就不能识别汉字。

PS:
一楼给的是直接答案,如果a,b确实都是正整数,那么已知a*b,a+b的最大值一定是a*b+1,但是这里要用计算机算出来。。。
二楼给的答案似乎理解错了LZ的意思了,还有,你的程序用到的sum未定义,肯定过不了编译器的。本回答被网友采纳
第2个回答  2019-05-13
首先,这要涉及到
数学问题

假设
,a,b都是
正整数
,已知a*b,求a+b的
最大值
,要用
穷举法
,利用
计算机程序
是最好不过的了。
我们先假定,这个
乘积
是100,然后,假设a从1递增到50(只递增到这个积的一半就可以了),这时如果发现有能够使a*b=100那么再将a+b的和与默认的最大值比较,如果小于
默认值
那就不做处理,大于默认值就自动将默认值改成这个最大值。大体思想就是这样,下面看下
程序
怎么实现:(PS:你回去验证下这个程序可行性,不行的话再告知我,我再做修改,这个只是程序的
算法
)
#include<stdio.h>
#define
N
100
//如果你想换个数字,那就在这里改下,再编译一次就可以了
int
main
(void)
{
int
sum,a,b,c;
c=(int)N/2;
//
括号
里面的int是
强制类型转换
sum=1;
for(a=1;a<=c;a++)
{
b=(int)N/a;
if(a*b==N)
//如果a*b与N不相等那就不用再计算a+b了,例如
【a=3时,b=(int)100/3=33,此时a*b不等于100,那就说明a=3不可以使得有相应的b使a*b=N】
if(sum<a+b)
sum=a+b;
}
printf("a+b的最大值为:%d\n",sum);
return
(0);
}
程序的结果应该是101,但是for
循环一直到a=50时之后结束,你可以验证下:在return
(0);
前面加上这两条
语句
就可以检查a,b的值是多少了:
printf("此时a的值为:%d",a);
printf("此时b的值为:%d",b);
当然,有些
编译器
不能识别
汉字
,你可以用
拼音
代替,记得我们
上大学
那会用的最多C语言编译工具就是TC,TC就不能识别汉字。
PS:
一楼给的是直接答案,如果a,b确实都是正整数,那么已知a*b,a+b的最大值一定是a*b+1,但是这里要用
计算机
算出来。。。
二楼给的答案似乎理解错了LZ的意思了,还有,你的程序用到的sum未定义,肯定过不了编译器的。
第3个回答  2011-05-20
#include<stdio.h>
#define N 10

void main(void)
{
int a[N]=;
int i;
int min; //最小值
int max; //最大值
int result; //乘积

/*
//用户输入数据则打开
printf("请输入数组数据:\n");
for (i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
*/

result = 1;
max=min=sum=a[0];
for (i=1;i<N;i++)
{
sum+=a[i];
if (max<a[i]) max=a[i];
if (min>a[i]) min=a[i];
}

result = min*max;

printf("最小值 = %d\n",min);
printf("最大值 = %d\n",max);
printf("乘积 = %d\n",result);
}
第4个回答  2011-05-19
a*b+1
相似回答