C++编程练习

// 阿汪面前有两只盲盒,每只盒子打开都有两种可能:或者装了 X 克狗粮,或者是一只容量为 Y 克的狗粮储蓄盒。如果是狗粮,阿汪可以快乐地吃掉;如果是空储蓄盒,那就倒霉了,阿汪必须想办法找到狗粮把这只储蓄盒装满,自己还吃不到。

// 正当阿汪发愁不知道该怎么选的时候,铲屎官大手一挥:“小孩子才做选择,大人全都要!”但全都要的结果,却不一定是赚了还是亏了……

// 我们假设聪明的阿汪总是能嗅出狗粮最多的盒子,并且绝不会选任何储蓄盒。而铲屎官没有这样的鼻子,他一定是全都要。铲屎官如果打开了有储蓄盒的盒子,就必须想办法把储蓄盒装满,他会优先用另一只盒子里的狗粮装(如果另外一只盒子里有狗粮),不够了还得自己去买新的狗粮,这样阿汪可就亏啦,什么都吃不到了。本题就请你判断阿汪到底是赚了还是亏了。

// 输入格式:
// 输入在一行中给出两个整数,绝对值都不超过 100,中间用一个空格分开,分别代表两只盒子里的东西。如果是正数就表示是狗粮的份量,如果是负数就表示绝对值是空盆的容量。两个数都肯定不是 0,因为保证没有空盒子。

// 输出格式:
// 第一行输出两个结果:如果让阿汪选能吃到的狗粮 A,和如果铲屎官全都要能吃到的狗粮 B。两个数字间用一个空格分开。如果铲屎官的决定让阿汪赚到了,就在第二行输出一个笑脸 ^_^,否则输出一个哭脸 T_T。但如果反正什么都吃不到(两个盒子里都没有狗粮),就输出一张躺平脸 -_-。
#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int a, b;
    cin >> a >> b;
    int A = max(a > 0 ? a : 0, b > 0 ? b : 0);//A:狗对两个盒子的选择
    int B = 0;//B:人的方法能吃到的狗粮数
    if (a > 0 && b > 0) {//①两个盒子中都有狗粮
        B = a + b;  
    } else if (a > 0 || b > 0) {//②两个盒子中只有一个有狗粮
        int food = max(a, b); 
        int box = min(a, b);   
        if (food >= -box) {
            B = food + box;   
        } else {//③两个盒子都没有狗粮,无论怎样都吃不到
            B = 0;            
        }
    }
 
    cout << A << " " << B << endl;
 
    if (A == 0 && B == 0) {
        cout << "-_-" << endl; //两个盒子都为0
    } else if (B > A) {
        cout << "^_^" << endl;//人的方法吃得更多
    } else {
        cout << "T_T" << endl;//狗的方法吃得更多
    }

    return 0;
}
//模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。

// 输入格式:
// 输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。

// 输出格式:
// 在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。

#include <iostream>
#include <string>
using namespace std;
int main() {
    string s;
    cin >> s;//输入算式
    int result = 0;
    int num = 0;
    char sign = '+';
    int i = 0;
    while (isdigit(s[i])) {
        num = num * 10 + (s[i] - '0');
        i++;
    }//识别数字
    result = num;
    while (i < s.length()) {
        sign = s[i];//将当前遇到的运算符赋值给sign
        i++;
        if (sign == '=') {//判断当前运算符是否是象征终止运算的=
            cout << result << endl;
            break;
        }
        if (sign != '+' && sign != '-' && sign != '*' && sign != '/') {//判断是否有不合法的运算符
            cout << "ERROR" << endl;
            return 0;
        }
        num = 0;
        while (i < s.length() && isdigit(s[i])) {
            num = num * 10 + (s[i] - '0');
            i++;
        }//判断下一个参与运算的数字是多少
        if (sign == '+') {
            result += num;
        } else if (sign == '-') {
            result -= num;
        } else if (sign == '*') {
            result *= num;
        } else if (sign == '/') {
            if (num == 0) {
                cout << "ERROR" << endl;
                return 0;
            }
            result /= num;
        }//进行运算
    }
    
    return 0;
}

 

posted @ 2025-10-21 23:09  bluepoet  阅读(15)  评论(0)    收藏  举报