我的第一个C程序:冒险岛上星

第一个程序

  • 冒险岛上星强化简介
    • 成功率:成功星星+1,从11星开始失败则-1,最低为10星
    • 花费:每次强化所需的费用
    • 破坏率:从12-13开始会有爆炸率,装备爆炸则重新从12开始
  • 以下完全未优化的源代码以及包括各项数据
#include<stdio.h>
#include<time.h> //使用随机数需要引入的头文件

/*上星程序
10-11
成功率50%
花费4448200
破坏率0

11-12
成功率45%
花费5625900
破坏率0

12-13
成功率40%
花费6982900
破坏率0.6%

13-14
成功率35%
花费8529400
破坏率1.3%

14-15
成功率30%
花费10275700
破坏率1.4%
*/

int star = 10;
int tim = 0;
int cost = 0;

int main(void)
{
	srand(time(NULL));

	while(star<15)
	{
		switch (star)
		{
		case 10:
		{
			int ran = rand() % 1000;
			printf("10:%d\n", ran);
			
			if(ran<500)
			{
				star++;
				tim++;
				cost += 4448200;
			}
			else
			{
				tim++;
				cost += 4448200;
				printf("s10:%d\n", star);
				continue;
				
			}
			
		}
		case 11:
		{
			int ran = rand() % 1000;
			printf("11:%d\n", ran);
			
			if (ran < 450)
			{
				star++;
				tim++;
				cost += 5625900;
			}
			else
			{
				tim++;
				cost += 5625900;
				star--;
				if (star <= 10)
					star = 10;
				printf("s11:%d\n", star);
				continue;
				
			}
			
		}
		case 12:
		{
			int ran = rand() % 1000;
			printf("12:%d\n", ran);
			
			if (ran <400)
			{
				star++;
				tim++;
				cost += 6982900;
			}
			else if (ran > 983)
			{
				star = 12;
				tim++;
				cost += 6982900;
				continue;
			}
			else
			{
				tim++;
				cost += 6982900;
				star--;
				if (star <= 10)
					star = 10;
				printf("s12:%d\n", star);
				continue;
				
			}
			
		}
		case 13:
		{
			int ran = rand() % 1000;
			printf("13:%d\n", ran);
			
			if (ran < 350)
			{
				star++;
				tim++;
				cost += 8529400;
			}
			else if (ran > 986)
			{
				star = 12;
				tim++;
				cost += 8529400;
				continue;
			}
			else
			{
				tim++;
				cost += 8529400;
				star--;
				if (star <= 10)
					star = 10;
				printf("s13:%d\n", star);
				continue;
				
			}
			
		}
		case 14:
		{
			int ran = rand() % 1000;
			printf("14:%d\n", ran);
			
			if (ran <300)
			{
				star++;
				tim++;
				cost += 10275700;
			}
			else if (ran > 985)
			{
				star = 12;
				tim++;
				cost += 10275700;
				continue;
			}
			else
			{
				tim++;
				cost += 10275700;
				star--;
				if (star <= 10)
					star = 10;
				printf("s14:%d\n", star);
				continue;
				
			}
			
		}

		}
	}
	printf("总次数:%d 总花费:%d", tim, cost);
	return 0;
}
  • 下面是我目前能尽量做的优化,是我学得太粗还是忘的太快?感觉还是一堆很烂的代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<time.h>
#include<stdlib.h>

/*上星程序
10-11
成功率50%
花费4448200
破坏率0

11-12
成功率45%
花费5625900
破坏率0

12-13
成功率40%
花费6982900
破坏率0.6%

13-14
成功率35%
花费8529400
破坏率1.3%

14-15
成功率30%
花费10275700
破坏率1.4%
*/

//先声明定义一些全局变量
int a = 10;
int b = 0;
int c = 0;
int d = 0;

int* star = &a;
int* tim = &b;
int* cost = &c;
int* ran = &d;


//先定义一个自定义函数
int star_up(int succ, int boom,int cos)
{
	int ra = rand() % 1000;
	printf("        succ:%d boom:%d 本次花费:%d\n", succ, boom, cos);
	printf("star:%d rand:%d 次数:%d 已经花费:%d\n", *star,ra,*tim,*cost);

	if (ra < succ)
	{
		*star+=1;
		*tim+=1;
		*cost += cos;
		return 1;
		
	}
	else if (ra > boom)
	{
		*star = 12;
		*tim+=1;
		*cost += cos;
		return -1;
	
	}
	else
	{
		*tim+=1;
		*cost += cos;
		*star-=1;
		if (*star <= 10)
			*star = 10;
		return 0;
	}

}


int main(void)
{
	srand(time(NULL));

	while (*star < 15)
	{

		switch (*star)
		{
		case 10:
		{
			int ret = star_up(500, 1001,4448200);
			if (ret == 1)
				printf("succes\n");
			else if (ret == -1)
			{
				printf("boom\n");
				continue;
			}
			else
			{
				printf("fail\n");
				continue;
			}
		}
		case 11:
		{
			int ret = star_up(450, 1001,5625900);
			if (ret == 1)
				printf("succes\n");
			else if (ret == -1)
			{
				printf("boom\n");
				continue;
			}
			else
			{
				printf("fail\n");
				continue;
			}
		}
		case 12:
		{
			int ret = star_up(400, 994,6982900);
			if (ret == 1)
				printf("succes\n");
			else if (ret == -1)
			{
				printf("boom\n");
				continue;
			}
			else
			{
				printf("fail\n");
				continue;
			}
		}
		case 13:
		{
			int ret = star_up(350, 987,8529400);
			if (ret == 1)
				printf("succes\n");
			else if (ret == -1)
			{
				printf("boom\n");
				continue;
			}
			else
			{
				printf("fail\n");
				continue;
			}
		}
		case 14:
		{
			int ret=star_up(300, 984,10275700);
			if (ret == 1)
				printf("succes\n");
			else if (ret == -1)
			{
				printf("boom\n");
				continue;
			}
			else
			{
				printf("fail\n");
				continue;
			}
		}

		}
	}
	printf("总次数:%d 总花费:%d", *tim, *cost);
	return 0;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值