include[HTML_REMOVED]
using namespace std;
float rks = 0, b1 = 0, b19 = 0;
int n = 20;
bool isComplete = false;
//string dif;
struct ACC
{
float acc;
float dn;
float RSPS;
}Acc[50];
//struct EZ
//{
// float ez_acc;
// float ez_dn;
//}ez[20];
//
//struct HD
//{
// float hd_acc;
// float hd_dn;
//}hd[20];
//
//struct IN
//{
// float in_acc;
// float in_dn;
//}in[20];
//
//struct AT
//{
// float at_acc;
// float at_dn;
//}at[20];
//bool cmp1(EZ x, EZ y)
//{
// return x.ez_acc > y.ez_acc;
//}
//
//bool cmp2(HD x, HD y)
//{
// return x.hd_acc > y.hd_acc;
//}
//
//bool cmp3(IN x, IN y)
//{
// return x.in_acc > y.in_acc;
//}
//
//bool cmp4(AT x, AT y)
//{
// return x.at_acc > y.at_acc;
//}
bool cmp5(ACC x, ACC y)
{
return x.RSPS > y.RSPS;
}
bool cmp6(ACC x, ACC y)
{
return x.dn > y.dn;
}
int ask()
{
puts(“”);
char a;
printf(“是否还要补充?(按下O键与回车键来补充,按其他键与回车键继续计算rks)\n”);
cin >> a;
if(a == 'O' || a == 'o')
{
puts("");
printf("请输入(格式同上):\n");
scanf("%f%f",&Acc[n].acc, &Acc[n].dn);
n ++;
ask();
}
else return n;
}
void ccl(int n)
{
rks = 0, b19 = 0;
for(int i = 0;i <= n-1;i ++) Acc[i].RSPS = pow(((Acc[i].acc - 55) / 45), 2) * Acc[i].dn;
sort(Acc + 1, Acc + 20, cmp5);
for(int i = 1;i <= 19;i ++)
b19 += Acc[i].RSPS;
for(int i = 0;i <= 20;i ++) printf("%.4f %.2f %f %f\n",Acc[i].RSPS, Acc[i].RSPS, Acc[i].acc, Acc[i].dn);
puts("");
rks = (b19 + b1) / 20 + 0.01;
printf("你当前的rks是:%.2f (b1 + b19 = %.2f + %.2f)\n",rks, b1, b19);
if(rks >= 16.365) printf("大神降临!!!\n");
}
void advice()
{
printf(“详细rks为:%f\n”,rks);
puts("");
printf("最低推分期望为:\n");
for(int i = 0;i <= 19;i ++)
{
float expectAcc = sqrt((rks + 0.01) / Acc[i].dn) * 45 + 55;
if(Acc[i].acc == 100 || expectAcc <= Acc[i].acc || expectAcc > 100.00) printf(" %.2f >> 无法推分 %.1f\n",Acc[i].acc, Acc[i].dn);
else if(expectAcc == 100) printf(" %.2f >> 100.00 %.1f\n",Acc[i].acc, Acc[i].dn);
else printf(" %.2f >> %.2f %.1f\n",Acc[i].acc, expectAcc, Acc[i].dn);
}
puts("");
}
int main()
{
printf(“使用须知:1.按照定数由高到低的顺序填入,且填入格式统一为“Acc+谱面定数”(中间用空格分开,Acc不加百分号)。\n”
” 2.优先填入phi,有多个phi时优先填入其中的最高定数,再填入剩下的。\n”
” 3.如果没有phi过歌,第一项则填为‘0 0’即可。\n”);
puts("");
printf("请先填入您AP过的最高定数的谱面(没有AP过谱面则填入“0 0”即可):\n");
scanf("%f%f",&Acc[0].acc, &Acc[0].dn);
b1 = Acc[0].dn;
puts("");
printf("您认为的b19的Acc与其谱面定数:\n");
for(int i = 1;i <= 19;i ++)
{
scanf("%f%f",&Acc[i].acc, &Acc[i].dn);
}
puts("");
ask();
ccl(n);
for(int i = 0;i <= 20;i ++)
if(Acc[i].acc == 100)
break;
if(isComplete) printf("\n你似乎还没有Phi过任何一首歌呢,请继续加油!\n");
cout << endl;
// advice();
printf("按下Y并按下回车来结束,或按下其他键并按下回车以继续\n");
char _ask;
cin >> _ask;
if(_ask == 'y' || _ask == 'Y')
{
puts("");
printf("感谢你的使用\n");
return 0;
}
else
{
puts("");
main();
}
return 0;
}