鱼C论坛

 找回密码
 立即注册
查看: 1318|回复: 4

[已解决]这题怎么写(我用暴力算法写出来的)有没有啥简单的方法

[复制链接]
发表于 2021-11-21 17:52:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
加减乘除经常在一起共事,共事久了,难免会出现各种争执。一天,加减乘除又因为一个问题争论不休,因为谁也不能说服对方,自己就是最厉害的。
问题是这样的:给定2个非0整数,然后对这2个非0整数进行加法、或减法、或乘法、或整除运算,谁(即某种运算)得到的结果最大,谁就是独一无二的霸主。
输入
输入2个非零整数。
输出
输出运算结果最大的所有运算式。
如果运算结果最大的运算式有多个,每行输出一个运算式,且按照"加法、减法、乘法、除法"的优先顺序逐行输出。
最佳答案
2021-11-21 20:42:13
牵风 发表于 2021-11-21 19:31
主要还要这样
样例输入 Copy
2 2
#include <stdio.h>

int max(int a, int b){
    return a > b ? a : b;
}
int min(int a, int b){
    return a < b ? a : b;
}

int main()
{
    int a, b, res[4];
    scanf("%d%d", &a, &b);
    res[0] = a+b;
    res[1] = max(a, b) - min(a, b);
    res[2] = a*b;
    if(!(max(a, b)%min(a, b))){
        res[3] = max(a, b)/min(a, b);
        int temp = -32767;
        for(int i = 0; i < 4; i++) temp = max(temp, res[i]);
        for(int i = 0; i < 4; i++){
            if(res[i] == temp){
                switch(i){
                    case 0:
                        printf("%d + %d = %d\n", a, b, a+b);
                        break;
                    case 1:
                        printf("%d - %d = %d\n", max(a, b), min(a, b), max(a, b)-min(a, b));
                        break;
                    case 2:
                        printf("%d * %d = %d\n", a, b, a*b);
                        break;
                    case 3:
                        printf("%d / %d = %d\n", a, b, a/b);
                        break;
                }
            }
        }
    }
    else{
        int temp = -32767;
        for(int i = 0; i < 3; i++) temp = max(temp, res[i]);
        for(int i = 0; i < 3; i++){
            if(res[i] == temp){
                switch(i){
                    case 0:
                        printf("%d + %d = %d\n", a, b, a+b);
                        break;
                    case 1:
                        printf("%d - %d = %d\n", max(a, b), min(a, b), max(a, b)-min(a, b));
                        break;
                    case 2:
                        printf("%d * %d = %d\n", a, b, a*b);
                        break;
                }
            }
        }
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-21 18:29:43 | 显示全部楼层
只有相乘和相减才会变成最大值不是吗?

相乘 > 相加(适用于 2 个正整数或 2 个负整数)
相减 > 相除(适用于 1 个正整数以及 1 个负整数)

代码:
#include <stdio.h>

int main()
{
    int a, b;
    scanf("%d%d", &a, &b);
    if((a > 0 && b > 0) || (a < 0 && b < 0)){
        printf("%d 乘 %d 等于 %d 为最大值", a, b, a*b);
    }
    else{
        int x = a > b ? a : b;
        int y = a < b ? a : b;
        printf("%d 减 (%d) 等于 %d 为最大值", x, y, x-y);
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-21 19:31:47 | 显示全部楼层
傻眼貓咪 发表于 2021-11-21 18:29
只有相乘和相减才会变成最大值不是吗?

相乘 > 相加(适用于 2 个正整数或 2 个负整数)

主要还要这样
样例输入 Copy
2 2
样例输出 Copy
2+2=4
2*2=4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-21 20:42:13 | 显示全部楼层    本楼为最佳答案   
牵风 发表于 2021-11-21 19:31
主要还要这样
样例输入 Copy
2 2
#include <stdio.h>

int max(int a, int b){
    return a > b ? a : b;
}
int min(int a, int b){
    return a < b ? a : b;
}

int main()
{
    int a, b, res[4];
    scanf("%d%d", &a, &b);
    res[0] = a+b;
    res[1] = max(a, b) - min(a, b);
    res[2] = a*b;
    if(!(max(a, b)%min(a, b))){
        res[3] = max(a, b)/min(a, b);
        int temp = -32767;
        for(int i = 0; i < 4; i++) temp = max(temp, res[i]);
        for(int i = 0; i < 4; i++){
            if(res[i] == temp){
                switch(i){
                    case 0:
                        printf("%d + %d = %d\n", a, b, a+b);
                        break;
                    case 1:
                        printf("%d - %d = %d\n", max(a, b), min(a, b), max(a, b)-min(a, b));
                        break;
                    case 2:
                        printf("%d * %d = %d\n", a, b, a*b);
                        break;
                    case 3:
                        printf("%d / %d = %d\n", a, b, a/b);
                        break;
                }
            }
        }
    }
    else{
        int temp = -32767;
        for(int i = 0; i < 3; i++) temp = max(temp, res[i]);
        for(int i = 0; i < 3; i++){
            if(res[i] == temp){
                switch(i){
                    case 0:
                        printf("%d + %d = %d\n", a, b, a+b);
                        break;
                    case 1:
                        printf("%d - %d = %d\n", max(a, b), min(a, b), max(a, b)-min(a, b));
                        break;
                    case 2:
                        printf("%d * %d = %d\n", a, b, a*b);
                        break;
                }
            }
        }
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2021-11-28 19:59:53 | 显示全部楼层
#include<stdio.h>
int main()
{
    int a,b,c,d,e,f;
    scanf("%d %d",&a,&b);
    c=a+b;
    d=a-b;
    e=a*b;
    f=a/b;
    if(c>=d&&c>=e&&c>=f){
    printf("%d+%d=%d\n",a,b,c);
}
    if(d>=c&&d>=e&&d>=f){
    printf("%d-%d=%d\n",a,b,d);
}
    if(e>=d&&e>=c&&e>=f){
    printf("%d*%d=%d\n",a,b,e);
}
    if(f>=d&&f>=e&&f>=c){
    printf("%d/%d=%d\n",a,b,f);
}
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 03:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表