精华内容
下载资源
问答
  • 角谷定理 C++
    千次阅读
    2020-10-31 10:10:27

    角谷定理就是对于一个大于一的整数n
    如果n为偶数,则 n = n/ 2;
    如果n为奇数 则 n = n * 3 + 1 ;
    如此反复操作 n 的最终值一定为1.

    这里输出了计算的过程,如果只要结果(计算次数),那么把过程的输出语句注释掉就好啦;

    果然学习还是需要多练习,之前学的循环。现在想起来还有许多需要精进的地方。

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	int n = 0;
    	cout << "请输入一个数n,1<n<100000" << endl;
    	cin >> n;
    	//cout << n << endl;
    
    	int i = 0;//次数
    	while (n > 1) 
    	{
    		if (n % 2 == 0)
    		{
    			cout << n << "/2= " << n / 2 << endl;
    
    			n = n / 2;
    			i++;
    		}
    		else 
    		{
    			cout << n << "*3+1= " << (n * 3 + 1) << endl;
    
    			n = 3 * n + 1;
    			i++;
    		}	
    	}
    
    
    	//for ( i = 1; 1 ; i++ )
    	//{
    	//	if (n % 2 == 0)
    	//	{
    	//		n = n / 2;
    	//	}
    
    	//	else
    	//	{
    	//		n = n * 3 + 1;
    	//	}
    
    	//	if (n == 1)break;
    	//}
    
    	cout << "所用计算次数为 " <<i << endl;
    
    	system("pause");
    	return 0;
    }
    
    更多相关内容
  • 适合大一二课程设计完成角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。
  • 角谷定理

    2021-05-19 14:16:54
    如:输入22输出22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1step=16二、算法构造1、递归算法根据角度定理的思想,定义一个有两个变量的递归函数:Kakutani(n,s)。其中n表示要计算的自然数,s表...

    一、题目描述

    输入一个自然数,若为偶数,则把它除以2;若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可以得到自然数1。

    如:输入22

    输出22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

    step=16

    二、算法构造

    1、递归算法

    根据角度定理的思想,定义一个有两个变量的递归函数:Kakutani(n,s)。其中n表示要计算的自然数,s表示已进行的步骤数。函数的意义是自然数n经过s步运算后得到自然数1。容易得到下面的递归公式:

    Kakutani(n,s) = { Kakutani(1,s) = 1 num=1

    ---------------------| Kakutani(num/2,s)+Kakutani(num*3+1,s)+Kakutani(1,s) num>1

    2、非递归算法

    具体算法实现如图所示。

    87e63bdda3e284bf124e72e03eeafa1c.png

    图2.2 角度定理非递归实现

    三、算法实现

    //角谷定理递归实现

    int Kakutani(int num, int step){

    if (1 == num){

    return step;

    }

    else{

    if (0 == num % 2){

    step++;

    printf("%d ", num / 2);

    return Kakutani(num / 2, step);

    }

    else{

    step++;

    printf("%d ", num * 3 + 1);

    return Kakutani(num * 3 + 1, step);

    }

    }

    }

    //角谷定理非递归实现

    int Kakutani_un(int num){

    int step = 1;

    while (num > 1){

    if (0 == num % 2){

    step++;

    num = num / 2;

    printf("%d ", num);

    }

    else{

    step++;

    num = num * 3 + 1;

    printf("%d ", num);

    }

    }

    return step;

    }

    四、调试、测试及运行

    1、调试

    (1)进入Kakutani()函数,调用递归结束开始返回的各数据的值。

    10ed5c59c9d97ac7cd16e02905584be9.png

    (2)Kakutani()函数调用结束各数据的值。

    1dbfdafa284c43858576c132b38ab54d.png

    (3)进入Kakutani_un()函数,调用递归结束开始返回的各数据的值。

    b758daa25cb40e48d3311c7161e1ff96.png

    (4)Kakutani_un()函数调用结束各数据的值。

    4f24c000c8700a316b61026f0ea2fdd3.png

    2、测试

    测试代码:

    void test(int num, int step)

    {

    int i = 1;

    while (num > 1){

    if (0 == num % 2){

    i++;

    num /= 2;

    }

    else{

    i++;

    num = num * 3 + 1;

    }

    }

    if (i == step){

    printf(“测试正确\n”);

    }

    }

    测试结果:

    47482901dfdf93e2d9eefc87f265d38b.png

    3、运行

    529dcbd5eade3e10bb4602cb4b7de799.png

    五、总结

    使用vs编译出现如下错误:

    错误1error LNK1168:无法打开

    E:\Visual Studio-workspace\chapter_6\Debug\chapter_6.exe 进行写入

    E:\Visual Studio-workspace\chapter_6\chapter_6\LINK chapter_6

    解决办法有三种(前两种治标不治本,第三种办法可以根治):

    1.什么都不干,等一会,大概几分钟吧,就可以成功生成了。

    2.把之前Debug文件夹里生成的.exe文件删掉,就可以成功生成了。

    3.最根本的办法:打开控制面板->管理工具->服务->启用Application Experience服务。

    展开全文
  • 3--[角谷定理].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码3--[角谷定理].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码3--[角谷定理].zip源码scratch2.0 3.0编程项目源文件源码案例素材源...
  • JAVA 实现角谷定理

    2021-07-20 15:47:50
    java 实现角谷定理 什么是角谷定理? 任意输入一个数,如果是偶数,则除以2,若是奇数,则乘3再加1.经历若干次后,最后的值一定是1,求需要经历多少次会变成1. 例如: 输入6:则 6 3 10 5 16 8 4 2 1 需要计算9次。 ...

    java 实现角谷定理

    什么是角谷定理?
    任意输入一个数,如果是偶数,则除以2,若是奇数,则乘3再加1.经历若干次后,最后的值一定是1,求需要经历多少次会变成1.
    例如:
    输入6:则
    6 3 10 5 16 8 4 2 1
    需要计算9次。

    package day0720;
    import java.util.Scanner;
    public class Demo {
    	static int count  =0;//创建一个全局变量进行计算次数
    	public static void main(String[] args) {
    		System.out.print("请输入一个数:");
    		int sc = new Scanner(System.in).nextInt();
    		int i = panduan(sc);
    		System.out.println();
    		System.out.println("共计算"+count+"次");
    	}
    	public static int panduan(int sc) {
    		if(sc==1) {
    			System.out.print(sc+" ");//输入为1不用进行运算
    			count++;   //计数
    		}else if (sc%2==0) {
    			System.out.print(sc+" ");
    			sc=sc/2;    //偶数需要除以2
    			panduan(sc);
    			//若不为1,需要继续进行运算,所以要再次调用
    			count++;   //计数
    		}else if (sc%2!=0) {
    			System.out.print(sc+" ");
    			sc=sc*3+1;   //奇数乘以3加1
    			panduan(sc);
    			//若不为1,需要继续进行运算,所以要再次调用
    			count ++;   //计数
    		}
    		return count;
    	}
    }
    

    验证结果:
    在这里插入图片描述在这里插入图片描述

    展开全文
  • XDOJ32角谷定理

    2022-02-21 14:49:09
    角谷定理
    问题描述:

    角谷定理定义如下:
    对于一个大于1的整数n,如果n是偶数,则n = n / 2。如果n是奇数,则n = 3 * n +1,反复操作后,n一定为1。
    例如输入22的变化过程: 22 ->11 -> 34 -> 17 -> 52 -> 26 -> 13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1,数据变化次数为15。
    输入一个大于1的整数,求经过多少次变化可得到自然数1。
    输入说明
    输入为一个整数n,1<n<100000。
    输出说明
    输出变为1需要的次数
    输入样例
    样例1输入
    22
    样例2输入
    33
    输出样例
    样例1输出
    15
    样例2输出
    26

    代码展示
    #include <stdio.h>
    //角谷定理 
    int main(){
    	int a;
    	scanf("%d",&a);
    	int count=0;
    	while(a!=1){
    		if(a%2==0){
    			a/=2;
    			count++;
    		}else{
    			a=a*3+1;
    			count++;
    		}
    	}
    	printf("%d",count);
    	return 0;
    }
    
    运行结果

    在这里插入图片描述在这里插入图片描述

    展开全文
  • 角谷定理的递归实现

    2021-05-28 12:06:45
    角谷定理 输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。 经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1 java代码实现 public class ( ){ static int s ; public...
  • 标题:角谷定理

    2021-10-12 22:37:00
    角谷定理 类别: 时间限制: 2 S 内存限制: 10000 Kb 问题描述: 角谷定理定义如下: 对于一个大于1的整数n,如果n是偶数,则n = n / 2。如果n是奇数,则n = 3 * n +1,反复操作后,n一定为1。 例如输入22的变化...
  • 角谷定理

    2020-12-10 09:03:06
    角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。(1) 问题分析:首先判断输入的自然数是不是1,如果不是1,...
  • 问题重述:角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。如:输入22,输出22 11 34 17 52 26 13 40 20 10...
  • C语言——角谷定理递归函数实现

    千次阅读 2020-12-16 10:13:15
    写在最前面 今天写的这道题其实不难,而且题目几乎把难点都提出来了,但是我还是花了很长时间找bug,真的是老学长大型翻车现场!在定义整形变量的时候直接把scanf()赋值给了这个整型变量结果一直计算不正确,唉,看...
  • python实现角谷定理

    千次阅读 2020-03-10 22:15:11
    角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。 经过如此有限次运算后,总可以得到自然数值1。 求经过多少次可得到自然数1。 如:输入22, 输出 22 11 34 17 52 26 13 40 20 10 5 16...
  • 角谷定理_递归(C语言)

    千次阅读 2019-09-08 22:26:27
    角谷定理。 输入一个自然数,若为偶数,则把它除以 2,若为奇数,则把它乘以 3 加 1。 经过如此有限次运算后,总可以得到自然数值 1。求经过多少次可得到自然数 1。 如: 输入 22 输出 22 11 34 17 52 26 13 40 20 ...
  • 角谷定理的递归解法(C语言)

    千次阅读 2020-03-01 22:12:31
    角谷定理。 输入一个自然数,若为偶数,则把它除以 2,若为奇数,则把它乘以 3 加 1。 经过如此有限次运算后,总可以得到自然数值 1。求经过多少次可得到自然数 1。 如:输入 22, 输出 22 11 34 17 52 26 13 40 20 ...
  •  角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。 如:输入22, 输出 22 11 34 17 52 26 13 40 20 10 5...
  • C语言 角谷定理 递归法 初学

    千次阅读 2019-12-20 20:08:51
    C语言 角谷定理 递归法 初学 题目:角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。 代码: 计数并输出每步...
  • java实现递归设计——数鸭子和角谷定理java实现递归设计——数鸭子和角谷定理一 .题目分析题目一:一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他...
  • 递归求角谷定理

    千次阅读 2017-05-17 19:24:44
    角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。 如:输入22 输出 22 11 34 17 52 26 13 40 20 10 5 16 8 ...
  • 角谷定理  题解:设n为输入数据  递归体:if(n%2==0) n/=2;  else n=n*3+1;  count++;  递归出口条件:n==1; 算法实现 赶鸭子(递归) #include using namespace std; int count=0; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,441
精华内容 576
关键字:

角谷定理

友情链接: X.rar