「若n为奇数java」若n为奇数,则Kn为欧拉图
本篇文章给大家谈谈若n为奇数java,以及若n为奇数,则Kn为欧拉图对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、用java 编写一个函数,输入n为偶数时调用函数1/2+1/4+...+1/n ,当输入n为奇数
- 2、Java中连续使用if,为什么程序会出错?
- 3、用java编写下面图形。n行。对称星星图,n为奇数 * *** ***** *** *
- 4、JAVA编程问题:求汉诺塔非递归JAVA代码
用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为欧拉图的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-20,除非注明,否则均为
原创文章,转载请注明出处。