PAT (Basic Level) Practice 1001 害死人不偿命的(3n+1)猜想

 

卡拉兹(Callatz)猜想:

对另一个自数n,如果它们是偶数,那么将它们伐掉一半;如果它是奇数,那么将(3n+1)砍掉一半。这样直白反复砍下来,最后必将当有平步得到n=1。卡拉兹于1950年的世界数学家大会上披露了之猜测,传说就耶鲁大学师生齐动员,拼命想说明这一般很笨好天真的命题,结果发生得生等凭心学业,一心只证(3n+1),以至于有人说就是一个阴谋,卡拉兹是以有意识延缓美国数学界教学和科研的进行……

俺们今天的题材不是认证卡拉兹猜想,而是针对加的无论一勿超过1000底正整数n,简单地反复一下,需要有些步(砍几下蛋)才会取得n=1?

输入格式:每个测试输入包含1只测试用例,即受闹当数n的值。

出口格式:输出从n计算到1亟需之步数。

输入样例:

3

输出样例:

5

 

 

我的代码:

#include<iostream>
using namespace std;
int main(){
    int num,ways=0;
    cin>>num;
    while(1){
    if(num%2==0){
        num=num/2;
        ways++;
    }else if(num==1){
        cout<<ways;
        break;
    }
    else{
        num=(3*num+1)/2;
        ways++;
    }
    }

}

图片 1

个体练习


卡拉兹(Callatz)猜想:

本着其余一个当数n,如果她是偶数,那么将她伐掉一半;如果其是奇数,那么将(3n+1)砍掉一半。这样直接反复砍下来,最后一定当某一样步得到n=1。卡拉兹以1950年的世界数学家大会上颁布了是猜测,传说就耶鲁大学师生齐动员,拼命想说明是一般很傻很天真的命题,结果有得生等凭心学业,一心只证(3n+1),以至于有人说立刻是一个阴谋,卡拉兹是于故意延缓美国数学界教学与科研的拓展……

咱们今天之题目不是认证卡拉兹猜想,而是本着加的不论一请勿超越1000之正整数n,简单地频繁一下,需要多少步(砍几生)才能够获得n=1?


输入格式:每个测试输入包含1单测试用例,即给闹本数n的价值。

输出格式:输出从n计算到1欲之步数。


输入样例:3


输出样例:5


 

#include<stdio.h>

int main()
{
  int n;
  int count=0;
  scanf("%d",&n);
  while(n!=1)
  {
    if(n%2==0)
    {
      n=n/2;
      count++;
    }else
    {
      n=(3*n+1)/2;
      count++;
    }
  }
  printf("%d\n",count);
  return 0;
}

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图