「若n为奇数java」若n为奇数,则Kn为欧拉图

博主:adminadmin 2022-12-20 04:57:06 63

本篇文章给大家谈谈若n为奇数java,以及若n为奇数,则Kn为欧拉图对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

用java 编写一个函数,输入n为偶数时调用函数1/2+1/4+...+1/n ,当输入n为奇数

最后是打印结果吗?

判断输入的数据n%2是否等于0(当然n本身不能等于0)就可以判定数据和奇偶了

然后调用两个不同的函数

如果代码不想自己写

支付宝3元可以帮你搞定

Java中连续使用if,为什么程序会出错?

语法上没有错误,但是两个用法在此程序中含义是不同的

改成else可以运行是因为在for循环内程序做了个选择 if (n%2== 0) 或者 n%2 !=0,然后经行循环判断。

如果不用else,而是选用两个if, for循环内则是先执行if (n%2 == 0), n=n/2, 此时n的值已经改变了(如果n为偶数), 然后执行 if (n%2==1) (此时的n已经n=n/2,即使n=1,也会执行以下操作)在对n进行赋值操作 n=3*n+1 (导致n永远会大于1),然后进行循环判断。

所以死循环。。。。

用java编写下面图形。n行。对称星星图,n为奇数 * *** ***** *** *

像这种图形对称的由少变多再变少可以考虑绝对值控制。

打个比方:就像在一个数轴上,越接近中心则距离越短,然后过了中心后,就会离中心越来越远。代码如下,如果n是可输入的,你用IO输入流代替即可。

public static void main(String[] args){

int n = 5;//*号的行数

/*控制*号的数量,最小为1,最大为n,由绝对值计算出变化*/

int m = 1;

int space = (n + 1) / 2;//空格的最大值

int s = 1;//和上面同理

for(int i = 0; i n; i++){

//控制空格输出

for(int j = 0; j Math.abs(space-s); j++){

System.out.print(" ");

}

s++;

//控制*号输出

for(int k = 0; k n - Math.abs(n - m); k++){

System.out.print("*");

}

m += 2;

System.out.println();

}

}

JAVA编程问题:求汉诺塔非递归JAVA代码

public class Hannuota {

private int n;//储存盘子个数

public Hannuota(int n){

this.n = n;

}

public void function(){

//初始化三个柱子,A是开始堆满盘子的柱子,C是目标柱子

Pillar a = new Pillar(n,n,"A");

Pillar b = new Pillar(n,"B");

Pillar c = new Pillar(n,"C");

//把三个柱子按顺序排好,详见后面的算法那里的解释

Pillar[] pillars = new Pillar[3];

pillars[0] = a;

if(n%2==0){

pillars[1] = b;

pillars[2] = c;

}else{

pillars[1] = c;

pillars[2] = b;

}

//开始移动,k用来计数,移动次数为2^n-1,至于为什么,我不太清楚,

//反正有人证明过。i是用来保存最小那个盘子正在哪跟柱子上的。

int i=0;

for(int k=0;k(int)Math.pow(2, n)-1;){

int min;

//将最小的盘子顺时针移动一个柱子

min = pillars[i%3].Pop();

pillars[(i+1)%3].Push(min);

System.out.println(pillars[i%3]+"-"+pillars[(i+1)%3]);

k++;

i++;

//这个IF好像可以不要,当时写的,后面忘了删除。

if(k(int)Math.pow(2, n)-1){

//如果,剩下两根柱子中,某一根为空,则一定是非空那根中最上面个盘子

//移动到空的那个柱子上。若两根都不为空,则把编号小的一个盘子

//移动到另外跟柱子上

if(!pillars[(i-1)%3].isEmpty()(pillars[(i+1)%3].isEmpty()||pillars[(i+1)%3].Top()pillars[(i-1)%3].Top())){

min=pillars[(i-1)%3].Pop();

pillars[(i+1)%3].Push(min);

System.out.println(pillars[(i-1)%3]+"-"+pillars[(i+1)%3]);

}else{

min=pillars[(i+1)%3].Pop();

pillars[(i-1)%3].Push(min);

System.out.println(pillars[(i+1)%3]+"-"+pillars[(i-1)%3]);

}

k++;

}

}

}

//主函数,用来测试的。3表示3个盘子。

public static void main(String args[]){

new Hannuota(3).function();

}

}

class Pillar{//构造一个新类,表示柱子,实际是当一个栈在用

private int[] s;

private int top;

private String name;

public String toString(){

return name;

}

//这个构造函数用来构造BC两个柱子,下面那个用来构造柱子A。其实也可以写成一个构造函数。

public Pillar(int max,String name){

s = new int[max];

top = -1;

this.name = name;

for(int i=0;imax;i++){

s[i] = max+1;

}

}

public Pillar(int n,int max,String name){

s = new int[max];

top = n-1;

this.name = name;

for(int i=0;imax;i++){

s[i] = max - i;

}

}

//这后面这些就是栈的基本方法了,不用介绍了吧

public boolean isEmpty(){

return top==-1?true:false;

}

public int Top (){

return s[top];

}

public int Pop(){

return s[top--];

}

public void Push(int x){

s[++top] = x;

}

}

算法是这个

首先容易证明,当盘子的个数为n时,移动的次数应等于2^n - 1。

首先把三根柱子按顺序排成品字型,把所有的圆盘按从大到小的顺序放在柱子A上。

根据圆盘的数量确定柱子的排放顺序:若n为偶数,按顺时针方向依次摆放 A B C;

若n为奇数,按顺时针方向依次摆放 A C B。

(1)按顺时针方向把圆盘1从现在的柱子移动到下一根柱子,即当n为偶数时,若圆盘1在柱子A,则把它移动到B;

若圆盘1在柱子B,则把它移动到C;若圆盘1在柱子C,则把它移动到A。

(2)接着,把另外两根柱子上可以移动的圆盘移动到新的柱子上。

即把非空柱子上的圆盘移动到空柱子上,当两根柱子都非空时,移动较小的圆盘

这一步没有明确规定移动哪个圆盘,你可能以为会有多种可能性,其实不然,可实施的行动是唯一的。

(3)反复进行(1)(2)操作,最后就能按规定完成汉诺塔的移动。

这玩意要非递归真麻烦。需不需要加点注释?

其实我不明白干嘛非要非递归。。。

关于若n为奇数java和若n为奇数,则Kn为欧拉图的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-20,除非注明,否则均为首码项目网原创文章,转载请注明出处。