69,381
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#define COUNT 21
// 是否还有球
int
HasNum(
int *ball
);
// 最小分数的球
int Min(
int *ball
);
// 最大分数的球
int Max(
int *ball
);
int
main(
const int argc,
const char *argv[]
)
{
int ball[COUNT];
int idx;
int sum = 0;
// 初期化为1分的球和2 3 4 5 6 7分的球
for (idx = 0; idx < COUNT; ++idx) {
ball[idx] = idx < COUNT - 7 ? 1 : COUNT - idx;
}
// 如果还有球,就循环
while (HasNum(ball)) {
// 取最小分数的球
int min = Min(ball);
// 累计最小分数的球的得分
sum += ball[min];
// 如果最小分数的球是1分,说明可以打一个其他颜色的球
if (ball[min] == 1) {
// 取最大分数的球
int max = Max(ball);
// 累计最大颜色的分的球
sum += ball[max];
}
// 打过的最小颜色的分数的球不能在打了,设置为0分
ball[min] = 0;
}
// 输出结果
printf("sum=%d\n", sum);
return 0;
}
// 是否还有球
int
HasNum(
int *ball
)
{
int idx;
for (idx = 0; idx < COUNT; ++idx) {
if (ball[idx] != 0) {
return 1;
}
}
return 0;
}
// 最小分数的球
int
Min(
int *ball
)
{
int idx;
int minpos = -1;
int value = 0x7FFFFFFF;
for (idx = 0; idx < COUNT; ++idx) {
if ((value > ball[idx]) && (ball[idx] > 0)) {
value = ball[idx];
minpos = idx;
}
}
return minpos;
}
// 最大分数的球
int Max(
int *ball
)
{
int idx;
int maxpos = -1;
int value = 0;
for (idx = 0; idx < COUNT; ++idx) {
if (value < ball[idx]) {
value = ball[idx];
maxpos = idx;
}
}
return maxpos;
}
int count (const int sum)
{
int value ;
int i ;
value = 0 ;
for (i = sum; i > 6; i--)
value += (7 + 1) ;
while (i > 0)
{
switch (i)
{
case 6 : value += 7 ;
break ;
case 5 : value += 6 ;
break ;
case 4 : value += 5 ;
break ;
case 3 : value += 4 ;
break ;
case 2 : value += 3 ;
break ;
case 1 : value += 2 ;
break ;
}
i-- ;
}
return value ;
}
int LeftTotalMax(int iRedNum)
{
if (iRedNum >=0 && iRedNum <= 15)
{
return (iRedNum<<3+27); //相当于一个红,一个黑,总共8分,iRedNum*8,最后27分全收
}
else
{
return -1;
}
}