牛客算法周周练16——B死肥宅的冲分计划
题目描述
国庆十天假,死肥宅选择回家休息,休息期间死肥宅开始了他的召唤师峡谷冲分之旅,冲分之前死肥宅向其他队员打赌十天内必上王者,已知死肥宅初始段位为黄金,因为死肥宅是游戏鬼才,所以他可以控制每天的段位变化不会超过一个大段,每天都会有队员查看下死肥宅的段位,如果死肥宅上了一个大段那么就会在小本本上记一个1,如果大的段位没有变化那么就会在小本本上记一个0,如果掉了一个大段,那么就记一个7,但是存在一些特殊情况使得队员记录的数字代表的意义会发生一些改变(详情可看备注)十天后,我们可以得到一个10个数字的序列,试着根据这串序列算出死肥宅是否上了王者,如果死肥宅成功的话那么请输出“666”,否则请输出“777"。
输入描述:
多组输入,每行输入10个数字,只包含1,0,7,三个数字。
输出描述:
10天后如果死肥宅的段位达到王者,输出"666";否则输出"777"。
示例1
输入:
7 7 7 7 7 7 7 7 7 7
1 1 1 1 1 1 1 1 1 1
输出:
777
666
备注:
段位晋级规则为:
黄铜 -> 白银 -> 黄金 -> 白金 -> 钻石 -> 大师 -> 王者
特殊状况:
如果降到黄铜,且下一天仍然没有升段,因为黄铜下面没有其他段位,那么记录信息的队员会在7和0中随机记录一个,7和0都代表当前段位没有发生变化。
如果升到王者,且下一天仍然没有掉段,因为王者之上没有其他段位,那么记录信息的队员会在0和1中随机记录一个,1和0都代表当前段位没有发生变化。
解题思路:
1.主要是弄清楚在各种情况下的段位变化,在这里我们可以定义一个point表示段位的等级,赋初值为1。
当条件满足段位为黄铜(point = -1)且输入数字为7或0时,段位不变;其余情况point减一;
当条件满足段位为王者(point = 5)且输入数字为1或0时,段位不变;其余情况point加一;
最后我们只需根据point的值来判断该名玩家是否上了王者。
2.输入结束条件
用户输入一组数据,我们给出判断结果;当用户输入数据不合法时,循环结束
循环部分代码如下:
while(scanf("%d",&temp)!=EOF)
首先,我们明确scanf有返回值且返回值为int型
其次,scanf的返回值有三种情况:
1.返回正整数:表示输入正确参数的个数
2.返回0:表示无正确输入
3.返回-1/EOF:遇到错误或end of file(EOF)
因此,在此题中我们采用scanf语句控制循环结束。
全题代码如下:
#include <bits/stdc++.h>
using namespace std;
int main(){
int temp;
int a[10];
while(scanf("%d",&temp)!=EOF)
{
int i = 0, point = 1;; //定义一个i用来计算天数,一个point用来表示段位
if(temp == 1 || temp == 0 || temp == 7){
a[0] = temp;
}else
break;
for(int j = 1; j < 10; j++){
cin >> temp;
if(temp == 1 || temp == 0 || temp == 7){
a[j] = temp;
}else
break;
}
for(i = 0; i < 10; i++){
if(a[i]==1&&point < 5){
point++;
}
if(a[i]==7&&point>-1){
point--;
}
}
if(point == 5){
cout << "666" << endl;
}else{
cout << "777" << endl;
}
}
}
本文地址:https://blog.csdn.net/wyx_601/article/details/107590378