- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
正在解决一个简单的 C 编程问题,但我有点卡住了。
问:编写一个函数,将两张牌二十一点手牌的值作为输入,并返回该手牌的总点数。值(value) 牌“2”到“9”等于其面值,牌“T”、“K”、“Q”、“J”值(value) 10 点,A(“A”)值(value) 11 点 除非有另一张 A,那么第二张 A 就值 1 分。该程序应该能够捕获不正确的输入。
示例:输入牌:T 7得分为17
输入卡片:A 5 分数是16
注意:我对 10 张卡使用了“T”值,因此您可以简单地传递两个字符, 而不是字符串,作为该函数的参数。
#define CASE_VALUE(str,val,card) case str: card = val;break;
int point_total(char card1,char card2){
int card1_v;
int card2_v;
switch(card1){
CASE_VALUE('2',2,card1_v);
CASE_VALUE('4',4,card1_v);
CASE_VALUE('5',5,card1_v);
CASE_VALUE('6',6,card1_v);
CASE_VALUE('7',7,card1_v);
CASE_VALUE('8',8,card1_v);
CASE_VALUE('9',9,card1_v);
CASE_VALUE('T',10,card1_v);
CASE_VALUE('K',10,card1_v);
CASE_VALUE('Q',10,card1_v);
CASE_VALUE('J',10,card1_v);
default:
return -1;
break;
}
switch(card2){
CASE_VALUE('2',2,card2_v);
CASE_VALUE('3',3,card2_v);
CASE_VALUE('4',4,card2_v);
CASE_VALUE('5',5,card2_v);
CASE_VALUE('6',6,card2_v);
CASE_VALUE('7',7,card2_v);
CASE_VALUE('8',8,card2_v);
CASE_VALUE('9',9,card2_v);
CASE_VALUE('T',10,card2_v);
CASE_VALUE('K',10,card2_v);
CASE_VALUE('Q',10,card2_v);
CASE_VALUE('J',10,card2_v);
default:
return -1;
break;
}
int value=card1_v+card2_v;
return value;
return -1;
}
// to test if it works
int main(void) {
char card1 = 10;
char card2 = 2;
printf("%i\n", point_total(card1, card2));
return 0;
}
现在它只返回-1,这意味着这手牌无效。我确信我忽略了一些小事。我也不确定如何实现 A(王牌)卡。想知道我是否走在正确的道路上,如果有任何帮助,我们将不胜感激!
最佳答案
算法不正确。
此外,您的代码中存在几个问题(按严重程度降序列出):
return -1;
在 return value;
之后是 dead code int card1_v
、int card2_v
不是必需的可以通过将 switch case 分组到不同的等价类并使用 ASCII 表值的十进制表示来改进代码。
以下代码是您在问题中描述的算法的正确实现,它也解决了我之前指出的问题。注释解释了代码。
#include <stdio.h>
int calculate_std_score(char card){
/* use the ASCII decimal values to group ['2'...'9'] in the same equivalence class;
shift the ASCII representation using '0' as "shifting value" to
obtain the corresponding decimal representation.
Example: '2' is 50 in ASCII, '0' is 48 in ASCII;
return (50 - 48)*/
if(49 < (int) card && (int) card < 58)
return (card - '0');
/* check for all the figures whose value is 10 */
if(card == 'T' || card == 'J' || card == 'Q' || card == 'K')
return 10;
/* we already checked the particular case of (A,A);
Now the card A can only have 11 as value */
if(card == 'A')
return 11;
/* error: unrecognized character; we ensure to obtain always a negative sum */
return -22;
}
int calculate_total_score(char card1, char card2){
/* check (A,A) case : the ASCII decimal value of char 'A' is 65 */
if((int) card1 + (int) card2 == 130)
return 11;/* (A,A) = 10 + 1 */
/* calculate the standard sum of the 2 card values */
int result= calculate_std_score(card1) + calculate_std_score(card2);
/* check erroneous result */
if(result < 0)
return -1;
/* return standard result : no error detected */
return result;
}
// to test if it works
int main(void) {
char card1 = 'T';
char card2 = '2';
printf("%i\n", calculate_total_score(card1, card2));
return 0;
}
关于c - 卡片增值 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43162564/
value = a[0]; 在 Java 脚本中可以这样做吗? 最佳答案 没有。这是正确的: a[0] = value; 因为赋值运算符具有从右到左的结合性。 检查this link用于运算符优先级表
我有一个这样的哈希表: Hashtable ht = new Hashtable(); ht.put("A", "one"); ht.put("B", "two"); 然后我调用它的 values
当用户在输入框中键入内容时,我希望他们的名字显示在文本“hello”之后。与此相反,“hello”一词被删除并替换为他们的名字。 var name = document.getElementById(
我从这些地址开始 www.example.com/nav/Default.aspx www.example.com/nav/Fruit/Apple.aspx 我想要的是隐藏地址中的 nav 和 asp
是否可以将整数添加到作用域变量中? 例如 .... 如果顶部是 140,它应该给我 "280px" 而不是 "140140px" 这可能吗? 最佳答案 并不是我认为这是最好的方法,但您可以尝试: .
这是我的 fiddle : http://jsfiddle.net/JWww3/ 我不确定为什么这段代码不起作用。 当我单击“+1”按钮时,我想向“ajout”变量添加+1。如果 ajout = 5(
我正在尝试更新/创建一个新的数据集并将先前的值与新的值相结合。 这就是我的 Python 脚本现在的样子。 dailyDataset = { "pId" : pub, "oId" :
这是我的 Firebase 键值图像 这是我的代码: Query query = myFirebaseRef.orderByChild("age"); query.addListene
我是一名优秀的程序员,十分优秀!