本题的主要意思可以理解为,给出的正整数数列中,任意一个n,如果不是数列中其他数的3n+1猜想的值,则为关键数。所以,编码思路为: 先计算出数列中所有正整数的3n+1猜想的值,存在一个数组或list中。3n+1猜想具体内容见“1001 害死人不偿命的(3n+1)猜想”。 循环数列,判断数列中每个正整数是否都在第一步计算的...
继续(3n+1)猜想 题目描述: 卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n=3 进行验证的时候,我们需要计算 3、5、8、4、2、1,则当我们对 n=5、8、4、2 进行验证的时候,就可...
&n);table[n]=1;}/* find numbers needed to test */for(inti=1;i<=100;i++)if(table[i])for(intj=i;j>1;){/* calculate for one step */if(j%2)j=(3*j+1)/2;elsej/=2;/* see if the new number is in given numbers */if(j<=100&&table[j])...
本题的主要意思可以理解为,给出的正整数数列中,任意一个n,如果不是数列中其他数的3n+1猜想的值,则为关键数。所以,编码思路为: 先计算出数列中所有正整数的3n+1猜想的值,存在一个数组或list中。3n+1猜想具体内容见“1001 害死人不偿命的(3n+1)猜想”。 循环数列,判断数列中每个正整数是否都在第一步计算的...
int a[N], c[N]; bool cmp(int a, int b) { return a > b; } int main() { int n; cin >> n; for (int i = 1; i <= n; i++) { int temp; cin >> temp; c[temp] = 1; while (temp != 1) { if (!(temp % 2)) ...
PAT.B1005 继续(3n+1)猜想 注意点 map里做标记时要做判断,因为计算过程中的值可能超过100,如果不加判断,会出现段错误 #include <bits/stdc++.h> usingnamespacestd; intmain(){ intn,sum=0; cin>>n; intmap[110]={0},arr[110]={0},ans[110]={0};...
1005 继续(3n+1)猜想 卡拉兹(Callatz)猜想:对任何一个自然数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n+1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1。 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对n=3进行验证的时候,我们需要计算 ...
#include<iostream>usingnamespacestd;intmain(){intn,k;boolc[310];//bool默认全体为0的,还不是falseinta[101];intnum=0;//符合要求的个数intout_count=1;//用来输出计数用的cin>>k;for(inti=0;i<k;i++){cin>>n;a[i]=n;while(n!=1){if(n%2==0){n/=2;}else{n=(3*n+1)/2;}c...
1005 继续(3n+1)猜想 一、问题描述: 卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n=3 进行验证的时候,我们需要计算 3、5、8、4、2、1,则当我们对 n=5、8、4、2 进行验证的...
你有一段逻辑写错了,if (t % 2 == 0) { t /= 2; } else { t = t * 3 + 1; } 这一段换成,if (t % 2 != 0) { t = t * 3 + 1;} t = t / 2;就可以通过了。题意是 如果它是奇数,那么把 (3n+1) 砍掉一半 而不是 3n + 1 ...