1,输入N, 打印 N*N螺旋矩阵
比如 N = 3,打印:
123
894
765
N = 4,打印:
1 2 3 4
1213145
1116156
109 8 7
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->/**
*
*@authorphinecos
*@since2005-05-27
*/
publicclasstest
{
privatestaticintn;
privatestaticint[][]array;
privatestaticintcurrent=1;
publicstaticvoidfill(intm)
{
if(current>=n*n)
{//递归结束条件
return;
}
inti;
//上
for(i=n-m;i<m;++i)
{
array[n-m][i]=current++;
}
//右
for(i=n-m+1;i<m-1;++i)
{
array[i][m-1]=current++;
}
//下
for(i=m-1;i>=n-m;--i)
{
array[m-1][i]=current++;
}
//左
for(i=m-2;i>=n-m+1;--i)
{
array[i][n-m]=current++;
}
//进入下一层
fill(m-1);
}
publicstaticvoidmain(String[]args)throwsException
{
n=10;
array=newint[n][n];
fill(n);
if(n%2==1)
{//奇数层次,补充中心点
array[n/2][n/2]=n*n;
}
for(inti=0;i<n;++i)
{
for(intj=0;j<n;++j)
{
System.out.print(array[i][j]);
System.out.print('/t');
}
System.out.println();
}
}
}
*
*@authorphinecos
*@since2005-05-27
*/
publicclasstest
{
privatestaticintn;
privatestaticint[][]array;
privatestaticintcurrent=1;
publicstaticvoidfill(intm)
{
if(current>=n*n)
{//递归结束条件
return;
}
inti;
//上
for(i=n-m;i<m;++i)
{
array[n-m][i]=current++;
}
//右
for(i=n-m+1;i<m-1;++i)
{
array[i][m-1]=current++;
}
//下
for(i=m-1;i>=n-m;--i)
{
array[m-1][i]=current++;
}
//左
for(i=m-2;i>=n-m+1;--i)
{
array[i][n-m]=current++;
}
//进入下一层
fill(m-1);
}
publicstaticvoidmain(String[]args)throwsException
{
n=10;
array=newint[n][n];
fill(n);
if(n%2==1)
{//奇数层次,补充中心点
array[n/2][n/2]=n*n;
}
for(inti=0;i<n;++i)
{
for(intj=0;j<n;++j)
{
System.out.print(array[i][j]);
System.out.print('/t');
}
System.out.println();
}
}
}
2,要求:不申请变量和空间反转字符串,用一个函数实现。
第一种解法就是不使用变量交换两个数的两种方法
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->char*reverseString(char*srcStr)
{//不申请变量和空间反转字符串
if(srcStr==NULL||strlen(srcStr)==0)
{
returnNULL;
}
if(strlen(srcStr)==1)
returnsrcStr;
for(inti=0,j=strlen(srcStr)-1;i<j;++i,--j)
{
//第一种交换方式,可能会溢出
//srcStr[i]=srcStr[i]+srcStr[j];
//srcStr[j]=srcStr[i]-srcStr[j];
//srcStr[i]=srcStr[i]-srcStr[j];
//第二种交换方式,可能会溢出
srcStr[i]=srcStr[i]^srcStr[j];
srcStr[j]=srcStr[i]^srcStr[j];
srcStr[i]=srcStr[i]^srcStr[j];
}
returnsrcStr;
}
{//不申请变量和空间反转字符串
if(srcStr==NULL||strlen(srcStr)==0)
{
returnNULL;
}
if(strlen(srcStr)==1)
returnsrcStr;
for(inti=0,j=strlen(srcStr)-1;i<j;++i,--j)
{
//第一种交换方式,可能会溢出
//srcStr[i]=srcStr[i]+srcStr[j];
//srcStr[j]=srcStr[i]-srcStr[j];
//srcStr[i]=srcStr[i]-srcStr[j];
//第二种交换方式,可能会溢出
srcStr[i]=srcStr[i]^srcStr[j];
srcStr[j]=srcStr[i]^srcStr[j];
srcStr[i]=srcStr[i]^srcStr[j];
}
returnsrcStr;
}
第二种方法就是利用空闲的’/0’字符占的位置作为中间变量,最后填补一个’/0’
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->char*reverseString(char*srcStr)
{//不申请变量和空间反转字符串
if(srcStr==NULL||strlen(srcStr)==0)
{
returnNULL;
}
if(strlen(srcStr)==1)
returnsrcStr;
for(inti=0,j=strlen(srcStr)-1;i<=j;++i,--j)
{
srcStr[len]=srcStr[i];
srcStr[i]=srcStr[j];
srcStr[j]=srcStr[len];
}
srcStr[len]='/0';
returnsrcStr;
}
{//不申请变量和空间反转字符串
if(srcStr==NULL||strlen(srcStr)==0)
{
returnNULL;
}
if(strlen(srcStr)==1)
returnsrcStr;
for(inti=0,j=strlen(srcStr)-1;i<=j;++i,--j)
{
srcStr[len]=srcStr[i];
srcStr[i]=srcStr[j];
srcStr[j]=srcStr[len];
}
srcStr[len]='/0';
returnsrcStr;
}
3,把一个32位的数按位反转
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
unsignedintbit_reverse(unsignedintn)
{
n=((n>>1)&0x55555555)|((n<<1)&0xaaaaaaaa);
n=((n>>2)&0x33333333)|((n<<2)&0xcccccccc);
n=((n>>4)&0x0f0f0f0f)|((n<<4)&0xf0f0f0f0);
n=((n>>8)&0x00ff00ff)|((n<<8)&0xff00ff00);
n=((n>>16)&0x0000ffff)|((n<<16)&0xffff0000);
returnn;
}
unsignedintbit_reverse(unsignedintn)
{
n=((n>>1)&0x55555555)|((n<<1)&0xaaaaaaaa);
n=((n>>2)&0x33333333)|((n<<2)&0xcccccccc);
n=((n>>4)&0x0f0f0f0f)|((n<<4)&0xf0f0f0f0);
n=((n>>8)&0x00ff00ff)|((n<<8)&0xff00ff00);
n=((n>>16)&0x0000ffff)|((n<<16)&0xffff0000);
returnn;
}
4,将给定的一个整数转换成字符串
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->char*IntToString(intnum)
{
intcount=0;
boolisNegative=false;
if(num<0)
{
num=-1*num;
isNegative=true;
++count;
}
inttmp=num;
while(tmp!=0)
{
++count;
tmp/=10;
}
char*result=newchar[count+1];
if(isNegative==true)
{
result[0]='-';
}
inti=count;
while(num!=0)
{
result[--i]=num%10+'0';
num/=10;
}
result[count]='/0';
returnresult;
}
{
intcount=0;
boolisNegative=false;
if(num<0)
{
num=-1*num;
isNegative=true;
++count;
}
inttmp=num;
while(tmp!=0)
{
++count;
tmp/=10;
}
char*result=newchar[count+1];
if(isNegative==true)
{
result[0]='-';
}
inti=count;
while(num!=0)
{
result[--i]=num%10+'0';
num/=10;
}
result[count]='/0';
returnresult;
}

被折叠的 条评论
为什么被折叠?



