青草游戏
/* 题目描述
牛牛和羊羊都很喜欢青草。今天他们决定玩青草游戏。
最初有一个装有n份青草的箱子,牛牛和羊羊依次进行,牛牛先开始。在每个回合中,每个玩家必须吃一些箱子中的青草,所吃的青草份数必须是4的x次幂,比如1,4,16,64等等。不能在箱子中吃到有效份数青草的玩家落败。假定牛牛和羊羊都是按照最佳方法进行游戏,请输出胜利者的名字。
输入描述:
输入包括t+1行。
第一行包括一个整数t(1 ≤ t ≤ 100),表示情况数.
接下来t行每行一个n(1 ≤ n ≤ 10^9),表示青草份数
输出描述:
对于每一个n,如果牛牛胜利输出"niu",如果羊羊胜利输出"yang"。
示例1
输入
复制
3
1
2
3
输出
复制
niu
yang
niu */
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
int cao;
cin >> t; // 3
while (t--)
{
cin >> cao; // 1 2 3
//为是4的幂,所以找规律,发现是5个一循环,羊牛羊牛牛
if (cao % 5 == 0 || cao % 5 == 2)
cout << "yang" << endl;
else
cout << "niu" << endl;
}
}
2. 小Q的排序
/* 题目描述
小Q在学习许多排序算法之后灵机一动决定自己发明一种排序算法,小Q希望能将n个不同的数排序为升序。小Q发明的排序算法在每轮允许两种操作:
1、 将当前序列中前n-1个数排为升序
2、 将当前序列中后n-1个数排为升序
小Q可以任意次使用上述两种操作,小Q现在想考考你最少需要几次上述操作可以让序列变为升序。
输入描述:
输入包括两行,第一行包括一个正整数n(3≤n≤10^5),表示数字的个数
第二行包括n个正整数ai,即需要排序的数字,保证数字各不相同。
输出描述:
输出一个正整数,表示最少需要的操作次数
示例1
输入
复制
6
4 3 1 6 2 5
输出
复制
2
说明
这题绝壁在逗我
*/
/*链接:https://www.nowcoder.com/questionTerminal/62a677c595fb471e832e4ed4107d3c63
来源:牛客网
aMin: 序列中的最小值
* aMax: 序列中的最大值
*
* 分三种情况:
* (1)aMin和aMax都在正确位置,即 aMin==a[0] && aMax==a[n]
* (2)aMin和aMax都不在正确位置,即 aMin!=a[0] && aMax!=a[n]
* (3)aMin和aMax只有一个在正确位置,即 aMin==a[0] || aMax==a[n]
*
* res: 使整个序列变为升序所需要的最少操作次数
* 对于第一种情况:如果原序列已是升序,则res=0,否则res=1
* 对于第二种情况:res=2
* 对于第三种情况:res=1
* */
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
int temp, bef;
cin >> n;
int min, max;
vector<int> vv;
bool tag = false;
cin >> temp;
min = max = bef = temp;
vv.push_back(temp);
n--;
while (n--)
{
bef = temp;
cin >> temp;
if (temp < bef)
tag = true;
vv.push_back(temp);
if (temp > max)
max = temp;
if (temp < min)
min = temp;
}
// cout << tag << ": " << min << ":" << max << endl;
if (!tag) //已经升序了
cout << "0" << endl;
else if (vv[0] == min && vv[vv.size() - 1] == max) //两个都在正确位置
cout << "1" << endl;
else if (vv[0] == min || vv[vv.size() - 1] == max) //只有一个在正确位置
cout << "1" << endl;
else //两个都不在正确位置
cout << "2" << endl;
}