这是程序的一部分(我没有添加所有编写的函数代码)。 " roll_a_dice()"为每个骰子创建一个数字。和 根据规则1,用户每个骰子将获得50分5。 根据规则2,用户将获得100分组合骰子(1,1,1) 我不知何故写了但看起来效率低下。如何以更有效的方式编写它?
注意:我不允许使用数组,指针等。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int compute_points(int ruleno)
{
int k=0,i;
switch(ruleno)
{
case 1:
if(d1==5) k+=50;
if(d2==5) k+=50;
if(d3==5) k+=50;
if(d4==5) k+=50;
if(d5==5) k+=50;
if(d6==5) k+=50; break;
case 2:
if(d1==1) i+=1;
if(d2==1) i+=1;
if(d3==1) i+=1;
if(d4==1) i+=1;
if(d5==1) i+=1;
if(d6==1) i+=1;
if(i=>3) k=100 break;
}
return k;
}
int main()
{
int m,p1,p2,turn, t1,t2,ruleno,d1,d2,d3,d4,d5,d6,point;
srand(time(NULL));
printf("FARKLE GAME!");
m=menu(m);
ruleno=select_rule_number(ruleno);
d1=roll_a_dice();
d2=roll_a_dice();
d3=roll_a_dice();
d4=roll_a_dice();
d5=roll_a_dice();
d6=roll_a_dice();
numberofdice(d1,d2,d3,d4,d5,d6);
point=compute_points(ruleno,d1,d2,d3,d4,d5,d6);
printf("Goodby!");
return 0;
}
答案 0 :(得分:0)
您可以使用一些C技巧来获得更优雅的解决方案。
试试这个:
result += 50 * ((d1 == 5) + (d2 == 5) + (d3 == 5) + (d4 == 5) + (d5 == 5) + (d6 == 5));
你知道这是做什么的吗?
首先,d1 == 5是一个布尔表达式,结果为true或false,所以如果它是5,它将产生1.如果不是,则为0.所以你要做的是你收集计数五个并乘以50.这会将大部分代码减少到一行。