有些意思的CC++编程题

有些意思的CC++编程题,第1张

有些意思的C/C++编程题 1. 2. 某人想将手中的一张面值100元的人民币换成10元、5元、2元和1元面值的票子。要求换正好40张,且每种票子至少一张。问:有几种换法?

解题思路:穷举法,没啥好说的。
优化方式:减少穷举次数:要每种钞票最少一张,所以 10 元钞票最多只能有 9 张;同理,5 元钞票最多只能有 19 张,2 元的和 1 元的最多只能有 37 张。

#include 

using namespace std;

// 穷举法思想
int main() {
    int a, b, c, d,total = 0;
    for (a = 1; a <= 9; a++) {
        for (b = 1; b <= 19; b++) {
            for (c = 1; c <= 37; c++) {
                for (d = 1; d <= 37; d++) {
                    if (a * 10 + b * 5 + c * 2 + d == 100 &&
                        a + b + c + d == 40) {
                        total++;
                    }
                }
            }
        }
    }
    cout << total << endl;
}

3. 读取一个字符串,字符串可能含有空格,将字符串逆转,原来的字符串与逆转后字符串相同,输出0,原字符串小于逆转后字符串输出-1,大于逆转后字符串输出1。例如输入 hello,逆转后的字符串为 olleh,因为hello 小于 olleh,所以输出-1。

解题思路:数组逆置,通过 strcmp() 判断两组字符串的大小。
需要说明的是,C++ 编译器已不支持 gets(),在 C++ 中,对字符数组的赋值,使用 cin.getline(字符数组名, 字符数组长度),若使用 C 语言,则还需要在逆置数组后再设置结束符 ‘’。

#include 
#include 
#include 

using namespace std;

int main() {
    char s[100];
    cin.getline(s, 100, '');  // 字符数组名称,字符数组大小,结束符(不写则默认)
    // gets(s); // C语言用法,C++编译器已不支持gets()
    int len = strlen(s);

    char v[100]; // 逆置数组

    for (int i = len - 1, j = 0; i >= 0; i--, j++) {
        v[j] = s[i];
    }

    // v[j] = ''; // C语言情况下,需要另设置字符串结束符

    int result = strcmp(s, v);

    if (result < 0) {
        cout << -1 << endl;
    } else if (result > 0) {
        cout << 1 << endl;
    } else {
        cout << 0 << endl;
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5698817.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存