求大师给答案,Java老师说不懂 大学数学老师说不会

问题描述

由用户输入一个整数(>=1),则形成一个顺时针螺旋递减等差数列矩阵,符合1,2,3…n*n输入数字2,则程序输出:1243输入数字3,则程序输出:123894765输入数字4,则程序输出:12341213145111615610987我们Java老师说问数学老师我们大学数学老师说不会求大师给答案

解决方案

解决方案二:
该回复于2011-04-29 08:33:48被版主删除
解决方案三:
估计你们老师是闲你烦懒得理你没有不敬的意思,这个用最笨的方法是可以实现的
解决方案四:
该回复于2011-04-28 13:09:01被版主删除
解决方案五:
引用2楼wolfkoala的回复:

估计你们老师是闲你烦懒得理你没有不敬的意思,这个用最笨的方法是可以实现的

我们讨论了一个小时没结果不是烦用最笨的方法您求给我看看带图带真相
解决方案六:
importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;publicclassBBB{publicstaticintd;publicstaticvoidmain(String[]args){BBBl=newBBB();System.out.println("请输入一个数:");BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));try{Stringstr=br.readLine();d=Integer.parseInt(str);}catch(NumberFormatExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}int[][]a=newint[d][d];System.out.println("排列:");intn=0;booleanflay=true;while(flay&&n<d){for(inti=n;i<d-n;i++)if(n==0)a[n][i]=i+1;elsea[n][i]=a[n][i-1]+1;flay=l.Chu(a);if(flay==false)break;for(inti=n;i<d-n-1;i++)if(n==0)a[i+1][d-1-n]=i+d+1;elsea[i+1][d-1-n]=a[i][d-1-n]+1;for(inti=n;i<d-n-1;i++)if(n==0)a[d-1-n][i]=a[d-1-n][d-1-n]+d-1-i;elsea[d-1-n][i]=a[d-1-n][d-1-n]+d-1-n-i;flay=l.Chu(a);if(flay==false)break;for(inti=1+n;i<d-n-1;i++)if(n==0)a[i][n]=a[d-1-n][n]+d-1-i;elsea[i][n]=a[d-1-n][n]+d-1-i-n;flay=l.Chu(a);n++;}l.OUT(a);}publicvoidOUT(int[][]a){for(inti=0;i<d;i++){for(intj=0;j<d;j++){System.out.print(a[i][j]+"t");}System.out.println();}}publicbooleanChu(int[][]a){for(inti=0;i<d;i++){for(intj=0;j<d;j++){if(a[i][j]==0)returntrue;}}returnfalse;}}
解决方案七:
兄弟你发了多少次啊给你个c的我以前写的其实就是找规律#include<stdio.h>intjisuan(inti,intj,intn);//计算ij对应数所在的圈数voidmain(){inti,j,circle,n,sign[100];printf("请输入矩阵的阶:");scanf("%d",&n);for(i=0;i<n;i++){sign[i]=1;}//标记数组初始化为“0”for(i=1;i<=n;i++){for(j=1;j<=n;j++){circle=jisuan(i,j,n);if(i!=circle&&(n+1-i)!=circle){if(j==circle)printf("%3d",(2-i+circle-1)+(4*(n-1)*circle-4*circle*(circle-1)));elseprintf("%3d",-(2-i+circle-1)+(4*(n-1)*(circle-1)-4*(circle-2)*(circle-1))+(n-2*(circle-1)+1));}else{if(i==circle)printf("%3d",(j-circle+1)+(4*(n-1)*(circle-1)-4*(circle-2)*(circle-1)));elseprintf("%3d",(-2-j+circle)+3*(n-2*(circle-1))+(4*(n-1)*(circle-1)-4*(circle-2)*(circle-1)));}//sign[circle-1]++;}printf("n");}//函数主体}intjisuan(inti,intj,intn){if(i>n/2)i=n+1-i;if(j>n/2)j=n+1-j;if(j>=i)returni;elsereturnj;}//sign[circle-1]+(4*(n-1)*(circle-1)+2*(circle-1)*(circle-2)))
解决方案八:
请输入一个数:3排列:123894765
解决方案九:
请输入一个数:9排列:123456789323334353637383910315657585960614011305572737475624112295471808176634213285370797877644314275269686766654415265150494847464516252423222120191817
解决方案十:
兄弟上午你发的忘了!
解决方案十一:
这本身就是一个写入的顺序问题,按照螺旋的规律一个一个的写入就是了。其实我在想,我怎么总觉得LZ的结果是顺时针递增的呢。。。
解决方案十二:
你没有跟你的老师解释清楚:java老师让你问数学老师是要你去问她这个算法的思路,也就是让数学老师帮弄一个公式出来,然后根据公式进行转换java
解决方案十三:
importacm.program.ConsoleProgram;publicclassarrayQextendsConsoleProgram{publicvoidrun(){intnum=readInt("pleaseinputanum:");initialTheClass(num);printOut(number);}/***initializetheclass'data*@paramnThenumberofthelinesofthearray*/publicvoidinitialTheClass(intn){number=n;array=newint[n][n];}/**toreturnthedirections(asanint[])ateveryturning*@paramnThenmeansthenumbersofthelinesorrowsofthearray*@returnanarrayaboutthedirections**/privateint[]getDirections(intn){int[]directs=newint[2*n-1];for(inti=0;i<2*n-1;i++){directs[i]=i%4;}returndirects;}/***printouttheoriginalarray*/privatevoidshowTheArray(){println("theoriginalarray:");for(inti=0;i<number;i++){for(intj=0;j<number;j++){print(array[i][j]+"");}print("n");}}/**toprintoutthearrayclockwise*@paramnThenmeansthenumbersofthelinesorrowsofthearray**/publicvoidprintOut(intn){int[]directions=getDirections(n);intdirection=RIGHT;intline=0;introw=0;intnu=1;//需要放进去的数println("thearrayisout:");for(inti=0;i<2*n-1;i++){direction=directions[i];for(intj=0;j<(n-(i+1)/2);j++){array[row][line]=nu++;//每次递增1if(j==(n-(i+1)/2-1)&&i!=2*n-2)//whenitisaturnningdirection=directions[i+1];switch(direction){caseRIGHT:line++;break;caseLEFT:line--;break;caseUP:row--;break;caseDOWN:row++;break;default:break;}}}showTheArray();}/*definethedirectionsasintegertoreference*/privatestaticfinalintRIGHT=0;privatestaticfinalintDOWN=1;privatestaticfinalintLEFT=2;privatestaticfinalintUP=3;privateintnumber;//thenumberofthelinesorrowsprivateint[][]array;}//原来写的一个用于那样顺时针螺旋输出的程序,给改了改。LZ看看吧。与数学有关的就是个数的拆分,比如36可以拆成6+5+5+4+4+3+3+2+2+1+1,拆出来的数字的个数也就是上述程序中拐点(turing处)的个数。这样应该明白了吧?
解决方案十四:
packagetest;publicclassTest{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubintn=5;intmatrix[][]=newint[n][n];finalintDIRECTION_R=1;finalintDIRECTION_D=2;finalintDIRECTION_L=3;finalintDIRECTION_U=4;intdir=DIRECTION_R;inti=0,j=0;for(intcnt=1;cnt<=n*n;){matrix[i][j]=cnt++;switch(dir){caseDIRECTION_R:if(j+1>=n||matrix[i][j+1]!=0){dir=DIRECTION_D;i++;}else{j++;}break;caseDIRECTION_D:if(i+1>=n||matrix[i+1][j]!=0){dir=DIRECTION_L;j--;}else{i++;}break;caseDIRECTION_L:if(j-1<0||matrix[i][j-1]!=0){dir=DIRECTION_U;i--;}else{j--;}break;caseDIRECTION_U:if(i-1<0||matrix[i-1][j]!=0){dir=DIRECTION_R;j++;}else{i--;}break;default:continue;}}for(intii=0;ii<n;ii++){for(intjj=0;jj<n;jj++){System.out.print(matrix[ii][jj]+"t");}System.out.println();}}}

解决方案十五:
publicclassTest{/*<summary>用数组来保存最终结果。point:以一周为一个循环,从1到x*x顺时针依次赋值,每次循环的最大行号和列号以及最小行号和列号是相等的。<summary>*/publicstaticvoidmain(Stringargs[]){intx=1;//初始递增量inta=8;//初始输入值int[][]result=newint[a][a];intmin=0;//最小行和列intmax=a-1;//最大行和列while(x<=a*a){introw=min;//行intcol=min;//列for(;col<=max&&x<=a*a;col++){result[row][col]=x++;}row=row+1;col=max;for(;row<=max&&x<=a*a;row++){result[row][col]=x++;}col=col-1;row=max;for(;col>=min&&x<=a*a;col--){result[row][col]=x++;}row=row-1;col=min;for(;row>min&&x<=a*a;row--){result[row][col]=x++;}min++;max--;}//输出结果for(inti=0;i<a;i++){for(intj=0;j<a;j++){System.out.print(result[i][j]+"t");}System.out.println();}}}此方法属于最基本的笨办法,基本满足了楼主的需要,希望对楼主有所帮助,期待下面能有更好的答案!
解决方案:
publicclassSpiralMatrix{publicfinalstaticintDOWN_FIRST=0;publicfinalstaticintRIGHT_FIRST=1;publicstaticvoidmain(String[]args){finalintN=9;finalintDIRECT=RIGHT_FIRST;int[][]spiralMatrix=newint[N][N];int[]rc={0,0};for(intc=0,n=1,t=(N<<1)-1;c<t;){intp=(c+1)>>1;while(p++<N){spiralMatrix[rc[0]][rc[1]]=n++;if(p==N){c++;}rc[(c&1)^DIRECT]+=1-(c&2);}}output(spiralMatrix);}privatestaticvoidoutput(int[][]matrix){for(inti=0;i<matrix.length;i++){for(intj=0;j<matrix[i].length;j++){if(j>0){System.out.print('');}System.out.printf("%2d",matrix[i][j]);}System.out.println();}}}123456789323334353637383910315657585960614011305572737475624112295471808176634213285370797877644314275269686766654415265150494847464516252423222120191817

解决方案:
引用5楼a19880905的回复:

importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;publicclassBBB{publicstaticintd;publicstaticvoidmain(String[]args){BBBl=newBBB();……

您这也太分了吧
解决方案:
该回复于2011-04-29 09:47:03被版主删除
解决方案:
其实你可以这样思考:第一个圈:1234567893210311130122913281427152616252423222120191817第二个圈333435363738395640554154425343524451504948474645下面类似...
解决方案:
packagetest.questions.some;importstaticjava.lang.System.out;importjava.io.BufferedReader;importjava.io.InputStreamReader;publicclassOne{//前进方向(1:→2:↓3:←4:↑)privatestaticintdirection=1;privatestaticfinalintRIGHT=1;privatestaticfinalintDOWN=2;privatestaticfinalintLEFT=3;privatestaticfinalintUP=4;publicstaticvoidmain(String[]args)throwsException{out.println("请输入一个大于1的正整数!");intind=0;BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));ind=Integer.parseInt(in.readLine());int[][]a=newint[ind][ind];a[0][0]=1;int[]b={0,0};//逐个设置下一个节点的值for(inti=0;i<ind*ind-1;i++){b=setNextNode(a,b[0],b[1]);}//打印数组for(inti=0;i<a.length;i++){int[]k=a[i];for(intj=0;j<k.length;j++){out.print(k[j]+"");}out.println();}}/***获取当前节点的下一个递增节点坐标**@paramarray*当前数组*@paramx*当前节点横坐标*@paramy*当前节点纵坐标*@return下一个递增节点的坐标*/privatestaticint[]setNextNode(int[][]array,intx,inty){int[]next={x,y};booleanchange=false;//true:改变前进方向,false:按当前方向前进。try{switch(direction){caseRIGHT://1:→if(array[x][y+1]>0){change=true;}else{array[x][y+1]=array[x][y]+1;next[1]=y+1;}break;caseDOWN://2:↓if(array[x+1][y]>0){change=true;}else{array[x+1][y]=array[x][y]+1;next[0]=x+1;}break;caseLEFT://3:←if(array[x][y-1]>0){change=true;}else{array[x][y-1]=array[x][y]+1;next[1]=y-1;}break;caseUP://4:↑if(array[x-1][y]>0){change=true;}else{array[x-1][y]=array[x][y]+1;next[0]=x-1;}default://donothing}}catch(ArrayIndexOutOfBoundsExceptione){change=true;}if(change){direction++;if(direction>4)direction=1;//改变方向之后设置下一个节点的值next=setNextNode(array,x,y);}returnnext;}}
解决方案:
该回复于2011-05-12 09:07:38被版主删除

时间: 2024-11-05 18:59:07

求大师给答案,Java老师说不懂 大学数学老师说不会的相关文章

c语言初学者-今天做的期中考试题,有答案,但是完全不懂,求注释

问题描述 今天做的期中考试题,有答案,但是完全不懂,求注释 #include #include //字符串处理函数的头文件 #define N 2 typedef struct BLOCK{/*在编程中使用typedef目的一般有两个, 一个是给变量一个易记且意义明确的新名字, 另一个是简化一些比较复杂的类型声明.*/ int n; char name[50][20]; }Block; void sort(char array[][20],int n); int main(void) { Blo

急求清华大学出版的JAVA程序设计教程(第五版)(作者:H.M.Deitel等施平安等翻译)的课后练习题答案…

问题描述 急求清华大学出版的JAVA程序设计教程(第五版)(作者:H.M.Deitel等施平安等翻译)的课后练习题答案- 解决方案 解决方案二:我也在找

java调用存储过程-Java执行删除/创建临时表的存储过程时,获取的影响行数总是-1,求大师指点

问题描述 Java执行删除/创建临时表的存储过程时,获取的影响行数总是-1,求大师指点 如题所述,使用Java代码执行删除.创建临时表的存储过程时总是执行不成功(不报错, 但是获取的影响行数为-1),别的存储过程都可以执行成功,求大师指点啊, 存储过程和Java代码如下: 1.存储过程代码 ALTER PROCEDURE [dbo].[PROC_TEMP] AS BEGIN if object_id('tempdb..##temp') is not null Begin DROP TABLE #

java问题-java项目显示错误,求大师解答

问题描述 java项目显示错误,求大师解答 java项目图表显示错误,但是里面的内容是正确的,以前还是好的,但是不知怎么就显示错误了,求解?

求大神回答 java的swing题目

问题描述 求大神回答 java的swing题目 1.创建项目Lab37,添加类MainFrame,继承自JFrame,实现ActionListener接口. 2.添加以下成员属性 a)JTree类型的treeDir b)String类型的dirName c)JSplitPane类型的sp d)JTable类型的fileInfo 3.构造方法 a)设置标题为"文件信息查看器" b)创建工具栏,并添加一个"打开"按钮.注册按钮事件监听对象为this c)构造一个只有一个

named-Linux下配置DNS服务器,报错“has no address records (A or AAAA)”,怎么解决,求大师指导

问题描述 Linux下配置DNS服务器,报错"has no address records (A or AAAA)",怎么解决,求大师指导 我搞不懂这段报错,怎么解决,您会吗?May 16 04:47:57 localhost named: test.zone:8: NS record '192.168.9.159' appears to be an addressMay 16 04:47:57 localhost named: zone test.com/IN: NS '192.16

求个人简历应用java的源代码

问题描述 求个人简历应用java的源代码 老师让用Android编一个个人简历应用,网页上找到一篇个人简历源代码,但不能免费下载,哪位大神有资源呀,求分享,简单点就好,我是大菜鸟,万分感谢!!!!!!!!!!! 解决方案 http://pan.baidu.com/s/1hqrtwzU 我刚找到下载的,记得采纳啊 解决方案二: 同求,同求,顶上来. 解决方案三: 同求,顶上来,快快快 拜托了 解决方案四: 你最好努力学习,然后自己写一个

耦合-求指教,关于JAVA接口,这样理解对不对?

问题描述 求指教,关于JAVA接口,这样理解对不对? 把接口看作是电脑上的USB接口,USB接口里有一种方法定义了一种规范,外部的usb设备比如usb鼠标,usb风扇在这个规范下具体实现了鼠标和扇风的功能,这样,人类可以使用usb这一种东西来调用usb接口外部的不同功能,需要改动的时候,只需要把能够实现所需要的功能的usb设备的线接到usb接口上就行了,而不用去做大量改动. 这么理解有什么偏差吗?求指教 解决方案 你可以有不同的理解,这没有任何问题. 当然,我觉得更接近编程思维的理解是,接口是一

求大师解答?百度地图开发无法定位到我的位置

问题描述 求大师解答?百度地图开发无法定位到我的位置 这是我的代码: public class MainActivity extends ActionBarActivity { private MapView mMapView; private BaiduMap mBaiduMap; private LocationClient mLocationClient;private MyLocatonListener mLocatonListener;private boolean isFirstIn