1,輸入N, 列印 N*N螺旋矩陣
比如 N = 3,列印:
1 2 3
8 9 4
7 6 5
N = 4,列印:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
複制代碼
/**
*
* @author phinecos
* @since 2005-05-27
*/
public class test
{
private static int n;
private static int[][] array;
private static int current = 1;
public static void fill(int m)
{
if (current >= n*n)
{//遞歸結束條件
return;
}
int i;
//上
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);
}
public static void main(String[] args) throws Exception
n = 10;
array = new int [n][n];
fill(n);
if (n%2 == 1)
{//奇數層次,補充中心點
array[n/2][n/2] = n*n;
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
{
System.out.print(array[i][j]);
System.out.print('\t');
}
System.out.println();
}
2,要求:不申請變量和空間反轉字元串,用一個函數實作。
第一種解法就是不使用變量交換兩個數的兩種方法
char* reverseString(char* srcStr)
{//不申請變量和空間反轉字元串
if (srcStr == NULL || strlen(srcStr) == 0)
return NULL;
if (strlen(srcStr) == 1)
return srcStr;
for (int i = 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];
return srcStr;
第二種方法就是利用空閑的’\0’字元占的位置作為中間變量,最後填補一個’\0’
for (int i = 0,j = strlen(srcStr)-1; i <= j ; ++i,--j)
srcStr[len] = srcStr[i];
srcStr[i] = srcStr[j];
srcStr[j] = srcStr[len];
srcStr[len] = '\0';
3,把一個32位的數按位反轉
unsigned int bit_reverse(unsigned int n)
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);
return n;
}
4,将給定的一個整數轉換成字元串
char* IntToString(int num)
int count = 0;
bool isNegative = false;
if (num < 0)
num = -1 * num;
isNegative = true;
++count;
int tmp = num;
while (tmp != 0)
tmp /= 10;
char* result = new char[count+1];
if (isNegative == true)
result[0] = '-';
int i = count;
while (num != 0)
result[--i] = num % 10 + '0';
num /= 10;
result[count] = '\0';
return result;
本文轉自Phinecos(洞庭散人)部落格園部落格,原文連結:http://www.cnblogs.com/phinecos/archive/2009/05/27/1491114.html,如需轉載請自行聯系原作者