1. 题目描述
给定一32位int数a,判断一下a*a 和 a*a*a谁比较大。
输入
多样例输入,每个样例一行,为一个int数。
输出
每个样例输出一行。
如果a*a = a*a*a,输出=;
如果a*a > a*a*a,输出>;
如果a*a < a*a*a,输出<。
Sample Input
2
-2
Sample Output
<
>
思路:
可以提高算法速度的方法,是将a与1还有0进行比较,对不同的a进行分类。不用计算平方与立方的具体值就能进行运算
代码:
#include<iostream>
using namespace std;
int main()
{
inta;
while(cin>>a)
{
if(a==1||a==0)
{
cout<<"="<<endl;
}
elseif(a>0&&a<1)
{
cout<<">"<<endl;
}
elseif(a<0)
{
cout<<">"<<endl;
}
else
{
cout<<"<"<<endl;
}
}
}
2.题目描述
n个人想玩残酷的死亡游戏,游戏规则如下: n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。请输出最后一个人的编号。
输入
输入n和m值。
输出
输出胜利者的编号。
Sample Input
5 3
Sample Output
4
HINT
第一轮:3被杀
第二轮:1被杀
第三轮:5被杀
第四轮:2被杀
思路:本题可以利用动态数组或链表实现
代码:
链表:
#include<iostream>
#include<vector>
using namespace std;
int main() {
intn, m;
cin>> n >> m;
vector<int>a;
for(int i = 0; i < n; ++i)
a.push_back(i+ 1);
vector<int>::iteratorit = a.begin();
while(a. size() > 1) {
for(int i = 1; i < m; ++i) {
it++;
if(it == a.end())
it= a.begin();
}
it= a.erase(it);
if(it == a.end())
it= a.begin();
}
cout<< a[0];
}
动态数组:
#include<iostream>
#include<vector>
using namespace std;
int main() {
int n, m;
cin>> n >> m;
vector<int>a;
for(int i = 0; i < n; ++i)
a.push_back(i+ 1);
vector<int>::iteratorit = a.begin();
while(a. size() > 1) {
for(int i = 1; i < m; ++i) {
it++;
if(it == a.end())
it= a.begin();
}
it= a.erase(it);
if(it == a.end())
it= a.begin();
}
cout<< a[0];
}