/*
* 作者: 陈先文
*
* 说明:
* 楼主没有给定数据结构,我设计了一个,如果需要改动,我可以代劳,
* 结构说明如下:
*
* 用一个二维数组来保存分数,score[i][j]表示第i局第j次击球的个数
* i从0至9,j为0或1. 另外,追加一个score10_3,以保存第10局的第3次击
* 球,如果没有第三次击球,则置0即可
*
* 若楼主需要以1至10为下标的,我可以代为修改程序。
*/
//初始化
int score[10][2] = {0};
//保龄球记分
int calucateScore(int **score, int score10_3) {
....int result = 0;
....//前9次击球记分
....for(int i = 0; i < 9; ++i) {
........//第一击全倒
........if(score[i][0] == 10) {
............//下一局第一击也全倒
............if(score[i+1][0] == 10) {
................//若非第9局,则加20分和下两局的第一次击球得分
................//否则加上20分和第10局第二击的得分
................result += i < 8 ? (20 + score[i+2][0]) : (20 + score[9][1]);
............}
............//下一局第一击没有全倒, 加下一局的两次击球得分
............else {
................result += 10 + score[i+1][0] + score[i+1][1];
............}
........}
........//第二击全倒
........else if(score[i][0] + score[i][1] == 10) {
............//加上10分和下一局第一击得分
............result += 10 + score[i+1][0];
........}
........//其他
........else {
............result += score[i][1] + score[i][2];
........}
....}
....//第10次击球, 下标为9, 记分
....result += score[9][0] + score[9][1];
....//若第10局有第三次击球,则加上该分数。
....if(score[9][0] + score[9][1] == 10)
........result += score10_3;
....return result;
}
不知道用C语言可不可以啊!我刚做完。
---------------VC++6.0下调试通过。
保龄球规则的c++代码
规则如下:
保龄球一场共10局,每一局最多打2球,至少打1球。
每一局共有10个瓶子,击倒一个瓶子得1分。若第1局到第9局的第一个球击倒10个瓶子(全倒),
则跳入下一局,不需要打第2个球。
若第10局的第1个球击倒10个瓶子,或者第10局的2个球加起来击倒10个瓶子(补中),
则第10局可以打第3个球。
保龄球10局最少打11个球,最多打21个球。
计分方式若该局中第1球击倒10个瓶子,则本局分数加计下两球的分数;
若一局中第1球加第2球共击倒10个球则本局分数会加计下局第1球的分数;
若一局2球没有击倒10个瓶子,该局只计击倒瓶子的分数。
*///***********************************************************************************/
#include
using namespace std;
struct pacegame//每局规则
{
int bt[3];
signed short score;//总分
};
static pacegame Arr[10];
void main()
{
cout<<"****************************************************************************"<
{
for (int j=0; j<3; j++)
Arr[i].bt[j]=0;
Arr[i].score=0;
}
char exit='\0';
cout<<"正否开始新的一局?(任意键开始!Ctrl+Z退出!)"<
{
for (i=0; i<10; i++)
{
for (int j=0; j<2; j++)
{
cout<<"第"< cin>>Arr[i].bt[j];
Arr[i].bt[j]=Arr[i].bt[j]%11;
if (1==j)
{
if ((Arr[i].bt[0]+Arr[i].bt[1])>10)
Arr[i].bt[j]=10-Arr[i].bt[0];
}
if ((10==Arr[i].bt[j]||10<=(Arr[i].bt[0]+Arr[i].bt[1])))
{
if (9==i)
{
cout<<"最后一局全部击倒!追加一球!"<
Arr[i].bt[2]=Arr[i].bt[2]%11;
break;
}
else
{
if (0==j) Arr[i].bt[2]=-2;
if (1==j) Arr[i].bt[2]=-1;
cout<<"恭喜你!全倒!进入下一局。"<
}
}
}
}
//统计分数:
cout<<"*--------------------本局比赛结束!统计如下:--------------------------*"<
for (i=0; i<10; i++)
{
cout<<"第"< switch (Arr[i].bt[2])
{
case -1:
Arr[i].bt[2]=Arr[i+1].bt[0];
break;
case -2:
Arr[i].bt[2]=Arr[i+1].bt[0]+Arr[i+1].bt[1];
break;
}
Arr[i].score=Arr[i].bt[0]+Arr[i].bt[1]+Arr[i].bt[2];
cout<<"第一球击倒: "<
cout<<"----------------------------------------------------------------"<
cout<<"本场总得分: "<
cout<<"正否开始新的一局?任意键开始!Ctrl+Z退出!"<
}
cout<<"****************************************************************************"<
既然用C++就搞个类呀。
等会儿帮你做啊
已经有人做出来了,呵呵,可是所有东西都在主函数里面让人家怎么代码复用呢?这种风格写作业还可以,如果这个程序的算法要用,这代码没法用啊
不会保龄球规则,虽然你说了,但我还是混淆,实在不好意思。