角谷猜想c語言
你的程序這樣改
#include "stdio.h"
int F(int a)
{
if (a==1) return 1;
if (a%2) return 1+F(3*a+1);
else return 1+F(a/2);
}
void main()
{
int a=0;
scanf("%d",a);
printf("%d",F(a));
}
有的數字遞歸次數很長導致堆棧溢出
我是這樣算的,可以一次算出1~n的循環步數
有到ProjectEuler題目就是這個
#include<iostream>
#include<math.h>
using namespace std;
#define N 100
int a[N+1]={0};
int f(int n);
void main()
{
int i=1;
a[1]=1;
for(i=1;i<=N;i++)
a[i]=f(i);
for(i=1;i<=N;i++)
cout<<i<<" "<<a[i]<<endl;
}
int f(int n)
{
if(n<=N&&a[n])
return a[n];
else
{
if(n%2)
return 1+f(n*3+1);
else
return 1+f(n/2);
}
}
❷ 請問誰知道「角谷猜想」怎麼作(C語言編程)
#include "stdlib.h"
#include "stdio.h"
#include "conio.h"
void main()
{
/*
角谷猜想
(1)當自然數N是奇數時,下一步變為 3N+1.
(2)當自然數N是偶數時,下一步變為 N除以2.
*/
int a,b,temp;
printf("請輸入你所要驗證的范圍\n");
printf("請輸入起始整數\n");
scanf("%d",&b);
printf("請輸入起始整數\n");
scanf("%d",&a);
for(;b<=a;b++)
{
temp=b;
while(temp!=1)
{
printf("%d ",temp);
if(temp%2 == 0)
{
temp/=2;
}
else
{
temp=3*temp+1;
}
}
printf("%d\n\n",temp);
}
printf("恭喜,你所輸入的范圍所有整數驗證完畢\n");
}
❸ C語言作業,角谷問題
#include <stdio.h>
int main()
{int x,x1;
scanf("%d",&x);
while(x!=1)
{if(x%2)
{x1=3*x1+1;
printf("%d*3+1=%d ",x,x1);
}
else
{x1=x/2;
printf("%d/2=%d ",x,x1);
}
x=x1;
}
return 0;
}
❹ C語言編寫角谷猜想,錯代碼什麼意思
E:\c++
6.0\100題\bh0260.c(25)
:
error
C2059:
syntax
error
:
'bad
suffix
on
number'
錯誤的下標數字用法
我暈。。。問題出在3n+1....
是3*n+1...而且,根據你提供的演算法,這里應該還得賦值,
main()
{
int
n;
printf("輸入一個正整數:");
scanf("%d",n)
;
/////這里你忘加了分號
while(n>0)
{
if(n%2==0)
{
n/=2;
///////
這里要改成n/=2
printf("%d\n",n);
}
else
{
n=3*n+1;
/////////這里得是賦值語句
printf("%d\n",n);
////括弧里的變數改為n
}
}
}
演算法給你改好了,自己調試吧
//////////////////////////////
不好意思,還有個地方漏改了,
while(n>1)改成這個
n/=2和n%=2有什麼區別?一個是除法一個是取余運算符,怎麼會一樣呢,這個其實是一種簡寫方法,完全分別等同於n=n/2;和n=n%2,就是這個意思。
////////////////////////////////
算了我把完整的代碼貼給你好了,再運行不了就見鬼了。。
#include
<stdio.h>
main()
{
int
n;
printf("輸入一個正整數:\n");
scanf("%d",&n)
;
/////這里你忘加了分號
while(n>1)
{
if(n%2==0)
{
n/=2;
///////
這里要改成n/=2
printf("%d\n",n);
}
else
{
n=3*n+1;
/////////這里得是賦值語句
printf("%d\n",n);
////括弧里的變數改為n
}
}
return
0;
}
❺ 角谷猜想,C語言,輸出過程
代碼比較簡單,各語句意義見注釋。。。
#include<stdio.h>
intmain(intargc,char*argv[])
{
inti;/*定義要處理的變數*/
scanf("%d",&i);/*輸入變數值*/
while(i!=1)
{
if(i%2)/*奇數*/
{
printf("%d*3+1=%d ",i,i*3+1);/*按題目要求的格式列印出來*/
i=i*3+1;/*更新變數值*/
}
else/*偶數*/
{
printf("%d/2=%d ",i,i/2);/*按題目要求的格式列印出來*/
i=i/2;/*更新變數值*/
}
}
printf("END ");/*最後列印END*/
return0;
}
另外幾個測試結果圖片:
❻ c++編程驗證「角谷猜想」
#include<stdio.h>
int
main()
{
int
n,count=0;
printf("Please
enter
number:");
scanf("%d",&n);
/*輸入任一整數*/
do{
if(n%2)
{
n=n*3+1;
/*若為奇數,n乘3加1*/
printf("[%d]:%d*3+1=%d\n",++count,(n-1)/3,n);
}
else
{
n/=2;
/*若為偶數n除以2*/
printf("[%d]:
%d/2=%d\n",++count,2*n,n);
}
}while(n!=1);
/*n不等於1則繼續以上過程*/
}
以上是c語言的,再給你弄個c++的
#include<iostream>
using
namespace
std;
int
main()
{
int
n,count=0;
cout<<"Please
enter
number:";
cin>>n;
/*輸入任一整數*/
do{
if(n%2)
{
n=n*3+1;
/*若為奇數,n乘3加1*/
++count;
cout<<"["<<count<<"]:"<<(n-1)/3<<"*3+1="<<n<<endl;
}
else
{
n/=2;
/*若為偶數n除以2*/
++count;
cout<<"["<<count<<"]:"<<2*n<<"/2="<<n<<endl;
}
}while(n!=1);
/*n不等於1則繼續以上過程*/
}
❼ C語言 角谷猜想 要求驗證角谷猜想,從鍵盤上輸入一個自然數n,輸出所有n到1經歷的所有數。
沒用過C語言 用python給你寫一個 你可以照著改改
num=6
print(num,end='')
while(num!=1):
if(num%2)==0:#偶數
num=num//2
else:#奇數
num=num*3+1
print(num,end='')#63105168421
❽ 求角谷猜想C語言程序,輸入一個正整數,輸出此整數回到1經過的步數,n<=10000
#include<stdio.h>
main()
{
int n,c=0;
printf("輸入一個小於等於一萬的整數:");
scanf("%d",&n);
if(n>10000&&n<0) printf("輸入錯誤請重新輸入!");
while(n!=1)
{
if(n%2==0)
n=n/2;
else
n=n*3+1;
c++;
}
printf("%d\n",c);
}
❾ 角谷猜想 c語言
#include<stdio.h>
int main()
{
int n, t, m = 0;
scanf("%d", &n);
t = n;
printf("%d ", t);
while(t != 1)
{
if(t % 2)
t = t * 3 + 1;
else
t /= 2;
m++;
printf("%d ", t);
}
printf("\n%d calculate %d times,the answer become to 1!\n", n, m);
return 0;
}
❿ c語言與角谷猜想
#include<stdio.h>
main()
{int
a,b,count;
printf("請輸入a的值,以便檢驗角谷猜想。\na=");
scanf("%d",&a);
b=a;
while
(a!=1)
{if
(a>1&&a%2==0)
{a=a/2
;printf
("→%d\n",a);}
else
{a=3*a+1;printf("→%d\n",a);}
count++;}printf("%d需經過%d步才得到1.",b,count);}
//如果能夠逆推出,比方說,23的下一步是70,那麼都有哪些數的下一步是70?如此逆推,就能寫成一棵"數論樹".