pat 乙级 1005 继续(3n+1)猜想 (25)
2017-09-03 13:45
239 查看
思路就是 定义一个数组 用来标记 每一个递推过程中出现的每一个数字是否出现过 ,出现标记为1;
具体看代码:
#include <stdio.h>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <string>
#include <cstring>
#include <algorithm>
#include <ctime>
using namespace std;
int c[100000]={0}; // 注意 这里不要开小了 ..一开始发生断错误就是开小了
int main()
{
int N;
cin>>N;
int a
;
int kong=0,num; // 用来格式输出的
for (int i = 0; i < N; ++i)
{
cin>>num;
a[i]=num;
if (a[i]==1) continue;
if (c[num]==0) // 如果未被标记过
{
while (num!=1) {
if (num%2==0)
{
num=num/2;
c[num]++; // 标记为1
}
else {
num=(3*num+1)/2;
c[num]++; // 标记为1
}
}
}
}
sort(a,a+N); // 题目要求 从大到小输出 所以排序 。然后倒着遍历
for (int i=N-1;i>=0;i--) {
if (a[i]==1) // 1 肯定是关键数
{
if (kong>0)
{
cout<<" "; // 这里
a086
是一个格式输出 下面同理
}
cout<<"1";
kong++;
}
else if (c[a[i]]==0) // 如果没被标记过 输出即可
{ if (kong>0)
{
cout<<" ";
}
cout<<a[i];
kong++;
}
}
return 0;
}
AC图:
相关文章推荐
- PAT乙级 1005. 继续(3n+1)猜想 (25)
- PAT乙级1005. 继续(3n+1)猜想 (25)
- 浙江大学PAT乙级试题.1005. 继续(3n+1)猜想 (25)C语言
- [PAT乙级]1005. 继续(3n+1)猜想 (25)
- pat乙级1005. 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想 (25) PAT乙级真题
- 1005. 继续(3n+1)猜想 (25) PAT乙级真题
- 【PAT】(乙级)1005. 继续(3n+1)猜想 (25)
- PAT乙级 1005. 继续(3n+1)猜想 (25)
- PAT乙级—1005. 继续(3n+1)猜想 (25)-native
- 1005. 继续(3n+1)猜想 (25)——PAT乙级
- 1005. 继续(3n+1)猜想 (25)-浙大PAT乙级真题java实现
- 1005. 继续(3n+1)猜想 (25)--PAT乙级
- PAT乙级1005. 继续(3n+1)猜想 (25)
- PAT乙级 1005. 继续(3n+1)猜想 (25)
- PAT 乙级 1005. 继续(3n+1)猜想 (25) Java版
- PAT-乙级-1005. 继续(3n+1)猜想 (25)
- PAT乙级.1005. 继续(3n+1)猜想 (25)
- pat 乙级 1005 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想 (25)-PAT乙级