33,311
社区成员
发帖
与我相关
我的任务
分享
//根据某游戏宝石合成规律(如下),得出各个方案的需求总体宝石数量。
//
//*合成规律:宝石从低到高分为1~6级,
//10个1级合成1个2级成功率为100%,9个1级合成1个2级成功率为90%....2个1级合成1个2级成功率为20%。
//合成成功时,得到一个2级宝石,合成失败时,保留1个1级宝石;
//10个2级合成1个3级成功率为100%,9个2级合成1个3级成功率为90%....2个2级合成1个3级成功率为20%。
//合成成功时,得到一个3级宝石,合成失败时,保留1个2级宝石;
//合成4~6级以此类推。
//
//*方案1:每次强化使用8颗宝石(如8颗1级升2级,用8颗2级升3级。。。以此类推)。
//*方案2:每次强化使用9颗宝石(规律同上)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define S 8 //每次强化使用8颗宝石
int m[6+1];//各级宝石数量
int y[6+1];//各级宝石合成成功次数
int n[6+1];//各级宝石合成失败次数
int syn(int lv,int num) {//合成lv级num个
int i;
if (num<=0) return 1;
if (num==1) {
if (lv==2) {
if (rand()%10<S) {//成功
m[1]-=S;
m[2]+=1;
y[2]++;
return 1;
} else {//失败
m[1]+=1;
n[2]++;
return 0;
}
} else {//lv>1
while (1) {
if (syn(lv-1,S-m[lv-1])) break;//合成lv-1级宝石S-m[lv-1]个直到成功
}
if (rand()%10<S) {//成功
m[lv-1]-=S;
m[lv ]+=1;
y[lv ]++;
return 1;
} else {//失败
m[lv-1]+=1;
n[lv ]++;
return 0;
}
}
} else {//num>1
for (i=0;i<num-m[lv];i++) {
while (1) {
if (syn(lv,1)) break;//合成lv级宝石1个直到成功
}
}
return 1;
}
}
int main() {
int L;
srand(time(NULL));
for (L=1;L<=6;L++) {m[L]=0;y[L]=0;n[L]=0;}
while (1) {
if (syn(6,1)) break;//合成6级宝石1个直到成功
}
for (L=1;L<=6;L++) printf("L m,y,n:%d %d %d %d\n",L,m[L],y[L],n[L]);
return 0;
}
//L m,y,n:1 -13111 0 0
//L m,y,n:2 -4 1693 433
//L m,y,n:3 -2 218 47
//L m,y,n:4 -3 28 4
//L m,y,n:5 -4 4 1
//L m,y,n:6 1 1 0
//根据某游戏宝石合成规律(如下),得出各个方案的需求总体宝石数量。
//
//*合成规律:宝石从低到高分为1~6级,
//10个1级合成1个2级成功率为100%,9个1级合成1个2级成功率为90%....2个1级合成1个2级成功率为20%。
//合成成功时,得到一个2级宝石,合成失败时,保留1个1级宝石;
//10个2级合成1个3级成功率为100%,9个2级合成1个3级成功率为90%....2个2级合成1个3级成功率为20%。
//合成成功时,得到一个3级宝石,合成失败时,保留1个2级宝石;
//合成4~6级以此类推。
//
//*方案1:每次强化使用8颗宝石(如8颗1级升2级,用8颗2级升3级。。。以此类推)。
//*方案2:每次强化使用9颗宝石(规律同上)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define S 8 //每次强化使用8颗宝石
int m[S+1];//各级宝石数量
int syn(int lv,int num) {//合成lv级num个
int i;
if (num<=0) return 1;
if (num==1) {
if (lv==1) {
if (rand()%10<S) {//成功
m[1]-=S;
m[2]+=1;
return 1;
} else {//失败
m[1]+=1;
return 0;
}
} else {//lv>1
while (1) {
if (syn(lv-1,S-m[lv-1])) break;//合成lv-1级宝石S-m[lv-1]个直到成功
}
if (rand()%10<S) {//成功
m[lv-1]-=S;
m[lv ]+=1;
return 1;
} else {//失败
m[lv-1]+=1;
return 0;
}
}
} else {//num>1
for (i=0;i<num-m[lv];i++) {
while (1) {
if (syn(lv,1)) break;//合成lv级宝石1个直到成功
}
}
}
}
int main() {
int L;
srand(time(NULL));
for (L=1;L<=6;L++) m[L]=0;
while (1) {
if (syn(6,1)) break;//合成6级宝石1个直到成功
}
for (L=1;L<=6;L++) printf("m[%d]:%d ",L,m[L]);
return 0;
}