小丑谜题(2)小丑绑架了詹姆斯·戈登局长。 赶到现场时,布鲁斯只发现了小丑留下的若干张扑克。根据阿福的分析,扑克牌记录了戈登局长的位置:

问题遇到的现象和发生背景 小丑谜题(2)

描述

小丑绑架了詹姆斯·戈登局长。

赶到现场时,布鲁斯只发现了小丑留下的若干张扑克。根据阿福的分析,扑克牌记录了戈登局长的位置:

扑克牌有四个花色:黑桃、红桃、方块、梅花
四个花色的处理:黑桃将数字乘3、红桃将数字乘5、方块取数字的阶乘、梅花取数字整除10的模
所有黑桃和红桃处理后得到的数字相加,是哥谭市的街区号
所有方块和梅花处理后得到的数字相加,是哥谭市的门牌号
比如:方块5 红桃3 黑桃5 黑桃A 梅花Q

得到的地址是哥谭市33街区122号。

蝙蝠侠立刻出击,解救了戈登局长。然而,小丑在那里留下了更多的扑克,等着布鲁斯去破解……

输入
输入有2行

第一行整数n(n < 56),代表一共有n张扑克给出

第二行有n张扑克,扑克用花色+数字记录,每张扑克用空格分隔

输出
输出1行,内容是街区+空格+门牌

输入样例 1

5
方块5 红桃3 黑桃5 黑桃A 梅花Q
输出样例 1

33 122
提示

出现的扑克牌不会重复,扑克牌字母是大写

问题相关代码,请勿粘贴截图 #include

#include
using namespace std;

int numberjie(char* k)
{
char sum3=1;
for(int i=1;i<=k;i++)
{
sum3=sum3
i;
}
return sum3;
}

int main()
{
int n;
char sum1=0,sum2=0;
string poke;
char count;
char s;
cin>>n;
while(n--)
{
cin>>poke>>count;
switch(count)
{
case 'A':
count=1;
break;
case 'j':
count=11;
break;
case 'Q':
count=12;
break;
case 'k':
count=13;
break;
default:
break;

    }
    if(poke=="方块")
    {
        s= numberjie(&count);
        sum2+=s; 

    }
    else if(poke=="红桃") 
    {
        sum1+=count*5;
    } 
    else if(poke=="黑桃")
    {
        sum1+=count*3;
    }
    else if(poke=="梅花")
    {
        sum2+=count/10;
     } 
    


    
}

cout<<sum1<<' '<<sum2<<endl;

system("pause");
system("cls"); 
return 0;

}

运行结果及报错内容
我的解答思路和尝试过的方法

//count 有数字型也有字符型,涉及字符转化为数字型

我想要达到的结果

如方块5 之间没有空格间隔 字符可以转化为数字型

case 'J':和 case 'K': J和K应该是大写
count变量是字符类型不能赋值成数值和进行数值运算
你题目的解答代码如下:

#include <iostream>
using namespace std;

int numberjie(int k)
{
    char sum3 = 1;
    for (int i = 1; i <= k; i++)
    {
        sum3 = sum3*i;
    }
    return sum3;
}

int main()
{
    int n;
    int sum1 = 0, sum2 = 0;
    string str;
    string poke;
    string count;
    int s;
    cin >> n;
    while (n--)
    {
        cin >> str;
        count = str.substr(4);
        poke = str.substr(0,4);
        if (count == "A")
            s = 1;
        else if (count == "10")
            s = 10;
        else if (count == "J")
            s = 11;
        else if (count == "Q")
            s = 12;
        else if (count == "K")
            s = 13;
        else
            s = count[0]-'0';

        if (poke == "方块")
        {
            sum2 += numberjie(s);
        }
        else if (poke == "红桃")
        {
            sum1 += s * 5;
        }
        else if (poke == "黑桃")
        {
            sum1 += s * 3;
        }
        else if (poke == "梅花")
        {
            sum2 += s % 10;
        }
    }

    cout << sum1 << ' ' << sum2 << endl;
    return 0;
}

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

cin>>poke>>count;这么读取的时候无法区分花色和大小
poke=="方块"这么写也不对,字符串比较需要用strcmp或者compare
case中的‘j'应该用大写
梅花用数字整除10取模,应用用%,而不是 /
阶乘函数传入的参数应该是int类型,输出是int类型(或者double类型)
代码修改如下:

img

#include <iostream>
#include <string>
using namespace std;

int numberjie(int k)
{
    int sum3=1;
    for(int i=1;i<=k;i++)
    {
        sum3=sum3*i;
    }
    return sum3;
}

int main()
{
    int n;
    string poke;
    char count;
    int nmb,jiequ=0,menpai=0;

    cin>>n;
    while(n--)
    {
        cin>>poke;
        //获取花色和大小
        count = poke.at(poke.length()-1);
        poke.replace(poke.length()-1,1,"");
        switch(count)
        {
        case 'A':
            nmb=1;
            break;
        case 'J':
            nmb=11;
            break;
        case 'Q':
            nmb=12;
            break;
        case 'k':
            nmb=13;
            break;
        default:
            nmb = count-'0';
            break;

        }
        
        if(poke.compare("方块")==0)
        {
            menpai += numberjie(nmb);
        }
        else if(poke.compare("红桃")==0) 
        {
            jiequ+=nmb*5;
        } 
        else if(poke.compare("黑桃")==0)
        {
            jiequ+=nmb*3;
        }
        else if(poke.compare("梅花")==0)
        {
            menpai+=nmb%10;
        } 

    }

    cout<<jiequ<<' '<<menpai<<endl;

    system("pause");
    system("cls"); 
    return 0;
}

注意要考虑红桃10、方块10等情况

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
    int n;
    cin >> n;
    vector<string> pokes(n);
    for (int i = 0; i < n; i++)
        cin >> pokes[i];
    int zone = 0, number = 0;
    for (int i = 0; i < n; i++)
    {
        const string &poke = pokes[i];
        char ch = poke[poke.size() - 1];
        string house = poke.substr(0, ch == '0' ? poke.size() - 2 : poke.size() - 1);
        int value = 0;
        switch (ch)
        {
        case '0':
            value = 10;
            break;
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
            value = ch - '0';
            break;
        case 'A':
            value = 1;
            break;
        case 'J':
            value = 11;
            break;
        case 'Q':
            value = 12;
            break;
        case 'K':
            value = 13;
            break;
        }
        if (house == "黑桃")
        {
            zone += value * 3;
        }
        else if (house == "红桃")
        {
            zone += value * 5;
        }
        else if (house == "方块")
        {
            int f = 1;
            for (int i = 2; i <= value; i++)
                f *= i;
            number += f;
        }
        else
        {
            number += value % 10;
        }
    }
    cout << zone << ' ' << number;
    return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632