PAT_乙级训练记录 (B1001)
来源:互联网 发布:保洁派单软件 编辑:程序博客网 时间:2024/05/17 07:57
PAT_乙级训练记录 (B1001)
1. 题目再现
害死人不偿命的(3n+1)猜想 (15’)
对任何一个自然数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n+1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1。卡拉兹在1950年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证(3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……
我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过1000的正整数n,简单地数一下,需要多少步(砍几下)才能得到n=1?
输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。
输出格式:输出从n计算到1需要的步数。
输入样例: 3
输出样例: 5
2. 题目思考
题目还是较为简单,主要掌握俩个点:
- 控制台输入内容转化为int数据
- 奇偶数的判断
3. 实现方式
c++实现
#include <cstdio>
int divide(int num);
int main()
{
int num;
int count = 0;
scanf("%d", &num);
while(num != 1)
{
num = divide(num);
count++;
}
printf("%d", count);
return 0;
}
int divide(int num)
{
if(num%2 == 0){
return num / 2;
}else
{
return (num * 3 + 1) / 2;
}
}java实现
import java.util.Scanner;
class Solution{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int num = in.nextInt();
int count = 0;
while(num != 1){
num = divide(num);
count++;
}
System.out.print(count);
}
public static int divide(int num){
if(num%2 == 0){
return num / 2;
}else{
return (num * 3 + 1) / 2;
}
}
}
0 0
- PAT_乙级训练记录 (B1001)
- PAT_乙级训练记录 (B1002)
- PAT_乙级训练记录 (B1032)
- PAT_乙级训练记录 (B1036)
- PAT_乙级1001
- PAT_乙级1006
- PAT_乙级1011
- PAT_乙级1016
- PAT_乙级1021
- PAT_乙级1026
- PAT_乙级1031
- PAT_乙级1036
- PAT_乙级1041
- PAT_乙级1046
- PAT_乙级1002
- PAT_乙级1004
- PAT_乙级1005
- PAT_乙级1008
- 混乱的学习历程 list。爬取58同城二手房,判断列表内字符串位置用(列表名).index(字符串名)
- 异常
- 关于node.js中文乱码
- 安卓rotation旋转动画模仿QQ音乐相册转动
- myeclipse中的jsp设置默认打开方式和打开编码
- PAT_乙级训练记录 (B1001)
- Servlet詳解
- 按位与、或、异或等运算方法
- win10下开通FTP服务器配置防火墙的方法
- linux和Windows的文本格式转换
- /*****/AVL树&红黑树
- Discuz开发之主题表pre_forum_thread的displayorder字段含义
- Unix ls UVA
- VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT