1打印一个N*N的方阵,N为每边字符的个数( 3〈N〈20 ),要求最外层为“X”,第二层为“Y”,从第三层起每层依次打印数字0,1,2,3,...
例子:当N =5,打印出下面的图形:X X X X X
X Y Y Y X
X Y 0 Y X
X Y Y Y X
X X X X X
代码:
#include <stdio.h>
static void change(char *b, int len)
{
int time = (len + 1) >> 1;
int l1, l2, k;
char buf[20] = "XY0123456789";
for (k = 0; k < time; ++k)
{
for (l1 = k; l1 < (len - 2*k) + k; ++l1)
for (l2 = k; l2 < (len - 2*k) + k; ++l2)
{
*(b+l1*len+l2) = buf[k];
}
}
}
static void ppt(char *b, int len)
{
int i, j;
for (i = 0; i < len; ++i)
for(j = 0; j < len; ++j)
{
printf("%c ", (b+len*i)[j]);
if ((j+1)%len == 0)
printf("\n");
}
}
int main(void)
{
int num = 12;
char err[num][num];
int i, j;
change(&err[0][0], num);
ppt(&err[0][0], num);
return 0;
}
2....螺旋队列。
#include <stdio.h>
int save[4][2] = { {-1, 1}, {1, 1}, {1, -1}, {-1, -1}, };
int get_gen(int num)
{
int i = 1;
while (1)
{
if ((i * i) > num)
return (i - 2);
i += 2;
}
}
int main()
{
int num = 5;
int n;
int count = 0;
int k;
int time;
int x, y;
n = get_gen(num);
k = n / 2;
count = (num - n * n) / (n + 1);
time = (num - n * n) % (n + 1);
printf("%d\n", time);
if (num == n * n)
{
x = save[count][0] * k;
y = save[count][1] * k;
}
else
{
switch (count)
{
case 0:
x = save[count][0] * k + time -1;
y = save[count][1] * k + 1;
break;
case 1:
x = save[count][0] * k + 1;
y = save[count][1] * k - time + 1;
break;
case 2:
x = save[count][0] * k - time + 1;
y = save[count][1] * k - 1;
break;
case 3:
x = save[count][0] * k - 1;
y = save[count][1] * k + time - 1;
break;
default:
printf("ERROR \n");
break;
}
}
printf("(%d , %d)\n", x, y);
return 0;
}
3蛇行填数
#include <stdio.h>
int X[4] = {1, 0, -1, 0};
int Y[4] = {0, -1, 0, 1};
void set_n(int (*num)[5], int n)
{
int i;
int j;
int k;
int a, b;
for(i = 0; i < n; ++i)
for(j = 0; j < n; ++j)
num[i][j] = 0;
a = 0;
b = n - 1;
k = 1;
while (k <= n*n)
{
for (i = 0; i < 4; ++i)
{
while (a >= 0 && a < n && b >= 0 && b < n)
{
if (num[a][b] != 0)
break;
num[a][b] = k++;
a += X[i];
b += Y[i];
if (k > n*n)
goto out;
}
a -= X[i];
b -= Y[i];
a += X[(i+1)%4];
b += Y[(i+1)%4];
}
}
out:
//printf
for (i = 0; i < n; ++i)
{
for (j = 0; j < n; ++j)
printf("%.2d ", num[i][j]);
printf("\n");
}
}
int main(void)
{
int num[5][5];
set_n(num, 5);
return 0;
}
4.周期字符串
#include <stdio.h> #include <string.h> int main(void) { char str[] = "abcabcabc"; int n = strlen(str); int i; int ok; int j; for (i = 1; i <= n/2; ++i) { for (j = 0, ok = 1; j < n; ++j) if (str[j] != str[j % i]) { ok = 0; break; } if (ok) { printf("%d\n", i); return 0; } } printf("%d\n", n); return 0; } 5汉诺塔
![]()
#include <stdio.h> void hannuo(int n, char a, char b, char c) { if (n == 1) printf("%d %c -----> %c\n", n, a, c); else { hannuo(n-1, a, c, b); printf("%d %c -----> %c\n", n, a, c); hannuo(n-1, b, a, c); } } int main(void) { hannuo(3, 'a', 'b', 'c'); return 0; }