游戏棋-模拟题

CSP模拟题——炉石传说 CSP模拟题——炉石传说题目思路分析完整代码 题目 玩家会控制一些角色,每个角色有自己的生命值和攻击力。当生命值小于等于 0 时,该角色死亡。角色分为英雄和随从。   * 玩家各控制一个英雄,游戏开始时,英雄的生命值为 30,攻击力为 0。当英雄死亡时,游戏结束,英雄未死亡的一方获胜。   * 玩家可在游戏过程中召唤随从。盘上每方都有 7 个可用于放置随从的空位,从左到右一字排开,被称为战场。当随从死亡时,它将被从战场上移除。   * 游戏开始后,两位玩家轮流进行操作,每个玩家的连续一组操作称为一个回合 阅读详情

游戏棋

时间限制:3000 ms  |  内存限制:65535 KB
难度:4
描述

相信大家都听说过大富翁这个游戏,一个不断进行色子抛出和买卖的格子游戏。在这个游戏中我们可以对于自己财产进行买卖。并且按照自己策略不断积攒财富。而且,在不同的地主对于玩家还有相应的惩罚机制。这都给这个汉诺带来了极大的趣味性。

郑州大学ACM实验室中最近这个游戏相当之流行。可以说大富翁的重要程度已经仅仅排在了训练的后面。但是网络中所能提供的地图是有限的,所以实验室的同学玩的时间长了之后就感觉非常无聊。可恶的开发团队并没有给出地图设计的软件。这个让整个实验室的同学们很纠结。所以他们最终决定自己开发一大套自己的大富翁游戏软件。在这个游戏内部测试版本中色子的功能被取消。每次一个人向前走一步。并且按照设定好的方式进行游戏。

在整个过程中,我们只有一种商品:房子。而且在整个过程中只有4种操作,分别是价格上升,价格下降,买房子,卖掉所有的房子。在游戏开始的时候我们会给予你一定的启动资金。

当你的资产大于原来的二倍的时候。(包括你的现金和房子数量乘以当前的价格,也就是说房子即使不卖出,也可以算做资产的部分)你就赢得了游戏。如果你的资产在某个时刻达到了原来的1/2之下。那你将失败。如果你在300次操作过程内没有结束游戏,那么就说明游戏本身设计的是有问题的。毕竟我们不能让我们的ACMer们过于沉迷于此。而且因为游戏是前期产品,如果游戏要求你买的房子超过你的现有资金或者要求你卖出的房子超过你的现有的房子数量。那么游戏将直接报错。

输入
输入分两部分:
第一部分 有一个整数T(1<=T<=10)表示测试组数。
第二部分 共T组,对于每组数据:
第一行有三个个数字X,Y和Z,表示整个游戏棋的大小,房子的初始价格,以及你的初始资产0<N<100,0<Y<50,5<Z<1000。
第二行到第N+1行是N个格子中的内容。你将顺次从第一个格子走到最后一个,然后再从第一个开始。四种内容分别是"price_up x","price_down x","sell x houses","buy x houses"其分别表示房子的价格上升x元,房子价格下降x元,卖掉x个房子,买入x个房子。
输出
如果你在300步之内赢得比赛那么输出"win",如果300步内输掉了比赛,那么输出"lose",如果你走到301步,那么直接输出"bad game"。
如果游戏报错了,直接输出"error"
样例输入
1
4 3 100
buy 30 houses
price_up 1000
sell 30 houses
price_down 100
样例输出
win

代码:

#include<stdio.h>
#include<string.h>
char s[15], house[15];
typedef struct
{
    int flag;
    int x;
}S;
S d[110];
int main()
{
    int tcases;
    int X, i, housenum, Y, Z, x, FM, len;
    int m, count, over;
    scanf("%d", &tcases);
    while(tcases--)
    {
        scanf("%d%d%d", &X, &Y, &Z);
        FM = Z;
        for(i = 0; i < X; i++)
        {
            scanf("%s", s);    
            len = strlen(s);
            if(len == 8)
            {
                scanf("%d", &x);
                d[i].flag = 0;
                d[i].x = x;
            }
            else if(len == 10)
            {
                scanf("%d", &x);
                d[i].flag = 1;
                d[i].x = x;
            }
            else if(len == 3)
            {
                scanf("%d", &x);
                scanf("%s", house);
                d[i].flag = 2;
                d[i].x = x;
            }
            else if(len == 4)
            {
                scanf("%d", &x);
                scanf("%s", house);
                d[i].flag = 3;
                d[i].x = x;
            }
        }
        count = 0; over = 0; housenum = 0;
        while(count < 300 && !over)
        {
            if( Z + housenum * Y > FM * 2)
            {
                over = 1;
                printf("win\n");
                continue;
            }
            if(Z + housenum * Y < FM / 2)
            {
                over = 1;
                printf("lose\n");
                continue;
            }
            m = count % X;
            count++;
            if(d[m].flag == 0)
            {
                 Y += d[m].x;
                 continue;
            }
            if(d[m].flag == 1)
            {
                Y -= d[m].x; 
                continue;
            }
            if(d[m].flag == 2)
            {
                if(d[m].x * Y > Z)
                {
                    over = 1;
                    printf("error\n");
                    continue;
                }
                Z = Z - d[m].x * Y;
                housenum += d[m].x;
                continue;
            }
            if(d[m].flag == 3)
            {
                if(housenum < d[m].x)
                {
                    over = 1;
                    printf("error\n");
                    continue;
                }
                housenum -= d[m].x;
                Z = Z + d[m].x * Y;
                continue;
            }
        }
        if(!over)
            printf("bad game\n");
    }
    return 0;
}

 
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>

using namespace std;

char gamecon[105][30];

int main()
{
    int i,t,gamestep,houseowned,winsig,scur;
	float oriprice,startmoney,orimoney,intinput;
	char temp1[30],temp2[30];
    //freopen("E:\\input.txt","r",stdin);
    scanf("%d",&t);
	while (t--)
	{
		winsig=0;
		houseowned=0;
        scanf("%d%f%f\n",&gamestep,&oriprice,&orimoney);
		startmoney=orimoney;
        for (i=0;i<gamestep;i++)
            gets(gamecon[i]);
        for (i=0;i<300;i++)
        {
			scur=i%gamestep;
			if (gamecon[scur][0]=='b')
			{
               sscanf(gamecon[scur],"%s%f%s",&temp1,&intinput,&temp2);
               orimoney-=intinput*oriprice;
			   houseowned+=intinput;
			   if (orimoney<0)
			   {
			      winsig=2;
			      break;
			   }
			}
			else if (gamecon[scur][0]=='s')
			{
			   sscanf(gamecon[scur],"%s%f%s",&temp1,&intinput,&temp2);
			   if (intinput>houseowned)
			   {
				   winsig=2;
			       break;
			   }
               orimoney+=intinput*oriprice;
			   houseowned-=intinput;
			}
			else
			{
			   sscanf(gamecon[scur],"%s%f",&temp1,&intinput);
			   if (strcmp(temp1,"price_up")==0)
			   {
				   oriprice+=intinput;
			       if (oriprice*houseowned+orimoney>2*startmoney)
			       {
					   winsig=1;
					   break;
			       }
			   }
			   else
			   {
				   oriprice-=intinput;
				   if (oriprice*houseowned+orimoney<startmoney/2)
				   {
					   winsig=4;
					   break;
			       }
			   }
			}
        }
		if (winsig==1)
			printf("win\n");
		else if (winsig==0)
			printf("bad game\n");
		else if (winsig==4)
            printf("lose\n");
		else
            printf("error\n");
	}
	return 0;
}        
                






python一级模拟题二及答案,python一级题目及答案 打印大衍数列的前 100 项。迭代之后发现第二个分隔符,是不是还有一个分隔符的索引,这个时候我们继续向字符串进行切片,切片的开始位置是你的 i 这个位置的指针,结束的位置是第二个 - 的指针,那遵循左闭右开,所以我们 is 这个单词,也可以添加进列表。就这样一直到最后呢,当我们去迭代到最后一个字符 n 的时候,发现后面是没有横杆分隔符了,这个时候我们需要进行处理一下,需要进行去判断一下,如果我们迭代到的字符是最后一个字符,那么我们进行切片的时候,就应该从哪个地方切呢?如果猜小了,往大的方向猜,再猜 75; 阅读详情

相关推荐

CSP-J复赛 模拟题4

两名同学在黑板上做删数游戏游戏规则如下:两名同学先一起在黑板上写了n个数字,同学A先擦掉一个数字,之后同学B再擦掉一个数字,轮流进行,直到黑板上只剩下最后一个数字;同学A希望最终留在黑板上的数字尽可能小,而同学B则希望最终留在黑板上的数字尽可能大。请问当两人都采取最优策略进行游戏时,黑板上剩下的数字是多少?第一行,一个数字T表示多组数据。第一行,一个正整数n表示n个数字;第二行,n个正整数1,2,...,a1​,a2​,...,an​。输出共T行,每行一个数字表示一组数据的结果。输入 #1 输出

xingdjk888的博客 1282

c语言文件chess.c

数据结构习题:已知两人分别执白和黑在一个围盘上下五子,若同一颜色的子在同一条横行、纵行或斜线上连成5个子,则执该颜色子的人获胜。编写程序读入某一时刻下的状态,并判断是否有人即将获胜,即:同一颜色的子在同一条横行、纵列或斜线上连成4个子,且该4个子的两端至少有一端为空位置。 输入的盘大小是19×19,用数字0表示空位置(即没有子),用数字1表示该位置下了一白色子,用数字2表示该位置下了一黑色子。假设同一颜色的子在同一条横行、纵列或斜线上连成的子个数不会超过4个,并且最多有一人连成线的子个数为4。 【输入形式】 从控制台输入用来表示盘状态的数字0、1或2;每行输入19个数字,各数字之间以一个空格分隔,每行最后一个数字后没有空格;共输入19行表示盘状态的数字。 【输出形式】 若有人即将获胜,则先输出即将获胜人的子颜色(1表示白色子,2表示黑色子),然后输出英文冒号:,最后输出连成4个子连线的起始位置(盘横行自上往下、纵列自左往右从1开始计数,横行最小的子在盘上的横行数和纵列数作为连线的起始位置,若在同一行上,则纵列数最小的子位置作为起始位置,两数字之间以一个英文逗号,作为分隔符)。 若没有人获胜,则输出英文字符串:No。 无论输出什么结果,最后都要有回车换行符。

数字游戏 (number)

一道十分毒瘤的模拟题。代码很短,推我花了二三十分钟。 数字游戏 传送门 - 数字游戏 Description 不高兴找到了一个 NNN 行 MMM 列的矩阵。 矩阵的第一行数字为 111 , 222 , 333 ,…, MMM ; 第二行数字为 M+1M+1M+1 , M+2M+2M+2 ,…, 2∗M2*M2∗M ; … 第 NNN 行数字为 (N−1)∗M+1(N-1)*M+1(N−1)∗M+1 , (N−1)∗M+2(N-1)*M+2(N−1)∗M+2 ,…, N∗MN*MN∗M 。 例如,对于 N=

531 の 流 水 线 3613

C#小游戏记忆围源码_修正白bug版

C#小游戏记忆围源码_修正白bug版 解决了有时白数量多于需要点击数的bug,降低了下载所需积分

POJ1753 翻转游戏 题解

题目大意 有一个4×4的盘,上面放满子,子一面是白色,另一面是黑色。每次翻转一枚子,同时与这枚子相邻的上下左右的子也要翻转。问能否通过数次翻转使得所有的子全部白色面朝上或全部黑色面朝上呢?如果不可以,输出 “Impossible”(没有引用号),如果可以,输出最小翻转次数。 样例输入 bwwb bbwb bwwb bwww 样例输出 4 思路 我们贪心地思考这个问题。假如最后我们的目标是全部为白色。对于盘第一行,我们可以尝试全部24=162^4=1624=16种可能的翻转操作(相当于为.

keguaiguai的博客 1476

子翻转

问题描述: 在4x4的盘上摆满了黑白子,黑白两色的位置和数目随机其中左上角坐标为(1,1),右下角坐标为(4,4),现在依次有一些翻转操作,要对一些给定支点坐标为中心的上下左右四个子的颜色进行翻转,请计算出翻转后的盘颜色。 给定两个数组A和f,分别为初始盘和翻转位置。其中翻转位置共有3个。请返回翻转后的盘。 测试样例: [[0,0,1,1],[1,0,1,0],[0,1,1,0]

中华胡杨的专栏 2204

OpenJudge NOI 2.1 755:Flip Game

以目标1为例,想要把所有子都翻成白色,第1行的翻转方案已经确定了,第1行翻转后,还剩余一些黑色子。那么这些子必须通过对第2行同列子进行翻转,才能将第1行的黑色子都变为白色。以此类推,每行的翻转情况都确定了,如果最后一行在翻转后,最后一行不都是白色,那么这一躺对第1行的翻转是无效的,去看下一种对第1行的翻转。游戏的目标是把所有的子翻转成全部子白色朝上,或全部子黑色朝上。第2行翻转后,第2行的黑色子必须通过对第3行的子进行翻转后才能变成白色。每个w和b表示游戏盘中的一个位置的的颜色。

君义NOIP的博客 1478

BUAA五子危险判断

【问题描述】 已知两人分别执白和黑在一个围盘上下五子,若同一颜色的子在同一条横行、纵行或斜线上连成5个子,则执该颜色子的人获胜。编写程序读入某一时刻下的状态,并判断是否有人即将获胜,即:同一颜色的子在同一条横行、纵列或斜线上连成4个子,且该4个子的两端至少有一端为空位置。 输入的盘大小是19×19,用数字0表示空位置(即没有子),用数字1表示该位置下了一白色子,用数字2表示该位置下了一黑色子。假设同一颜色的子在同一条横行、纵列或斜线上连成的子个数不会超过4个,并且最多有一

weixin_45927469的博客 3039

五子(C语言)

【问题描述】 已知两人分别执白和黑在一个围盘上下五子,若同一颜色的子在同一条横行、纵行或斜线上连成5个子,则执该颜色子的人获胜。编写程序读入某一时刻下的状态,并判断是否有人获胜。 输入的盘大小是19×19,用数字0表示空位置(即没有子),用数字1表示该位置下了一白色子,用数字2表示该位置下了一黑色子。假设同一颜色的子在同一条横行、纵行或斜线上连成的子个数不会超过5个,...

Running Snail 2468

1808: 小d的翻转游戏

http://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1808 1808: 小d的翻转游戏 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 116  Solved: 27 SubmitStatusWeb Board Description 小d同学最近在玩翻转游戏,这个

glu_cky的博客 513

HDU 4121

福州赛区最水的一道模拟题。。。。坑爹啊,各种细节没考虑到,导致WA了N多次后才得以AC。 这题就是判定当前的局面来说,对于黑方是否是死局。 还好黑方只有一个将。。。 红方也只有炮,马,车,帅。 思路很简单:考虑将能走四个方向。先判断这四个方向是否合理。 再对红方每个子能否扫描到这个点,可以的话就判断下一个方向。如果四个方向均被红方的子扫描到的话,就是死局。反之则不是。 这题还要注意...

weixin_30695195的博客 83

日常刷题(NOIP模拟题)翻转游戏

NOIP模拟题,记录经验题解。

m0_73159693的博客 366

模拟题

CSP201604-3路径解析 解题过程 题面有些难读很容易就理解错了题意 在处理需要规范化的路径时,如果输入的路径如果是相对路径,将当前路径加到它的前面使其变为绝对路径,并在path末尾加上/以便后续分割路径。使用vector型变量spath存放当前处理的字符串的每一部分。 对path进行遍历,若当前遍历到的字符是/,则访问下一个字符直到找到不是/的字符或者遍历结束,如果找到则将/之后的内容提取出来,存放到string变量part中,并记录此时遇到的/的位置。如果part等于…,则将最晚进入spath的元

qq_45224092的博客 403

编程机考模拟题

编程机考题库

qq_41772375的博客 8798

POJ 模拟题集合

http://www.cppblog.com/Uriel/articles/101592.html 感觉这个暑假没有去年有激情啊,,,还没到状态就已经块上学了,,, 真是弱暴了,,,找几道模拟题刷刷。。。 标加号表示已AC。。。 + 1008 历法,不难 + 1102 不难。 + 1028 纯模拟。被题目坑了一下。。 1023 貌似...

abcdefghijk0987的博客 313

WEEK9 复杂模拟题

本节课的内容面向复杂模拟题,以A题为例重点讲解了面向对象的方法 文章目录A 咕咕东的目录管理器题目描述:输入:输出:整个解题过程:教训B 东东学打牌 A 咕咕东的目录管理器 具体参考PPT,题目链接https://vjudge.net/contest/368284#problem/A 题目描述: 咕咕东的雪梨电脑的操作系统在上个月受到宇宙射线的影响,时不时发生故障,他受不了了,想要写一个高效易用零...

祎祎怪的博客 310

Scratch等级考试(二级)模拟题

青少年编程竞赛交流群已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档)。 这是第14次 Scratch竞赛交流群活动之后给小朋友们留的模拟题,开放出来方便小朋友们复习。 一级编程题: 01 森林的一天 02 舞者凯希 03 小狗散步 04 猫捉老鼠 05 城堡漫步 06 火箭发射 07 飞向太.

老马的程序人生 951

模拟题游戏

【题目描述】Alice 和 Bob 在玩一个游戏,给出一张 n × m 的盘,上面有一些点是障碍,游戏的开始,Alice 选定盘 上任意一个不是障碍的格子,并且将一枚子放在其中,然后 Bob 先手,两人轮流操作子,每次操作必 须将子从当前位置移动到一个相邻的无障碍且未经过的格子(即每个格子不允许经过两次),不能操作的 人输,如果两人都按照最优策略操作,请问初始时 Alice 将子放

Heret1c 3198
上一篇: 计算-小数相加-无限循环小数转为分数
下一篇: DP-统计单词个数
XIMO_W
博客等级 码龄15年 10粉丝 47原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值