描述
小丑绑架了詹姆斯·戈登局长。
赶到现场时,布鲁斯只发现了小丑留下的若干张扑克。根据阿福的分析,扑克牌记录了戈登局长的位置:
扑克牌有四个花色:黑桃、红桃、方块、梅花
四个花色的处理:黑桃将数字乘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
using namespace std;
int numberjie(char* k)
{
char sum3=1;
for(int i=1;i<=k;i++)
{
sum3=sum3i;
}
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;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
cin>>poke>>count;这么读取的时候无法区分花色和大小
poke=="方块"这么写也不对,字符串比较需要用strcmp或者compare
case中的‘j'应该用大写
梅花用数字整除10取模,应用用%,而不是 /
阶乘函数传入的参数应该是int类型,输出是int类型(或者double类型)
代码修改如下:
#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;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!