3569168_ac_0ms_344k.cc
来自「北大大牛代码 1240道题的原代码 超级权威」· CC 代码 · 共 125 行
CC
125 行
#include <set>
#include <vector>
#include <stdio.h>
#include <algorithm>
using namespace std;
typedef set <int> SI;
typedef vector <int> VI;
VI score;
SI num;
int size;
struct triple
{
int a, b, c;
};
vector <triple> cb;
void init()
{
num.clear();
score.clear();
num.insert(50);
for (int i = 0; i <= 20; i++)
{
num.insert(i);
num.insert(i * 2);
num.insert(i * 3);
}
size = num.size();
for (SI::iterator it = num.begin(); it != num.end(); ++it)
{
score.push_back((*it));
}
}
triple make_triple(int a, int b, int c)
{
triple ret;
ret.a = a;
ret.b = b;
ret.c = c;
return ret;
}
int solve()
{
int ans = 0;
for (int i = 0; i < cb.size(); i++)
{
triple tp = cb[i];
int a, b, c;
a = tp.a;
b = tp.b;
c = tp.c;
if (a == b && b == c)
{
ans++;
continue;
}
if (a != b && b != c && a != c)
{
ans += 6;
continue;
}
ans += 3;
}
return ans;
}
void work()
{
int n, a, b;
while (scanf("%d", &n) == 1 && n > 0)
{
cb.clear();
for (int i = 0; i < size; i++)
{
a = score[i];
if (a > n)
{
break;
}
for (int j = i; j < size; j++)
{
b = a + score[j];
if (b > n)
{
break;
}
for (int k = j; k < size; k++)
{
if (b + score[k] == n)
{
cb.push_back(make_triple(score[i], score[j], score[k]));
break;
}
}
}
}
if (cb.empty())
{
printf("THE SCORE OF %d CANNOT BE MADE WITH THREE DARTS.\n", n);
}
else
{
printf("NUMBER OF COMBINATIONS THAT SCORES %d IS %d.\n", n, cb.size());
printf("NUMBER OF PERMUTATIONS THAT SCORES %d IS %d.\n", n, solve());
}
puts("**********************************************************************");
}
puts("END OF OUTPUT");
}
int main()
{
init();
work();
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?