① 用c语言表示 蛇形矩阵和矩阵旋转怎么表示呢,怎么理解思路呢
我不太清楚蛇形矩阵呀。不过我知道矩阵旋转的思路,不知道能不能帮上你,我是这么理解的,矩阵的旋转跟矩阵的转置大同小异,比如一个3阶矩阵的【1 0 0,010,001 】在转置的情况下,a[i][j]会变成a[j][i],函数不难实现,写在纸上,与原矩阵进行比较,找规律即可,C语言无非就是FOR 和IF的基本混合应用,先不要考虑复杂的如指针等,如果不会可以继续追问我,我要睡了,晚安
② c语言 蛇形填数 疑问
程序没问题,在vs2010正常运行,应该是编译器问题吧?
③ c语言蛇形填阵
#include<stdio.h>
#defineMAXN50
inta[MAXN][MAXN];
intmain()
{
intn,x,y,tot=0;
scanf("%d",&n);
memset(a,0,sizeof(a));
tot=a[x=0][y=n-1]=1;
while(tot<n*n)
{
while(x+1<n&&!a[x+1][y])a[++x][y]=++tot;
while(y-1>=0&&!a[x][y-1])a[x][--y]=++tot;
while(x-1>=0&&!a[x-1][y])a[--x][y]=++tot;
while(y+1<n&&!a[x][y+1])a[x][++y]=++tot;
}
for(x=0;x<n;x++)
{
for(y=0;y<n;y++)
printf("%3d",a[x][y]);
puts("");
}
return0;
}
④ 急求!C语言的蛇形方阵!
#include "conio.h"
#include <stdio.h>
#include <stdlib.h>
#define N 6
int mDir[4][2]={ {1,0},{-1,1},{0,1},{1,-1} }; //4个填充方向:左、左下、下、右上,顺序填充
void StepOn(int x,int y,int s[N][N],int len)
{ int i,j,d=0,n=0,begin=1;
while ( 1 )
{ if ( s[y][x]==0 )
{ n++; s[y][x]=n;
if ( begin ) begin=0; //起始点不计
else if ( (d==0||d==2) ) d=(d+1)%4; //如果当前方向是左或下,立即转向
}
else //不空
{ for ( i=0;i<4;i++ ) //顺序测试4个方向
if ( x+mDir[(d+i)%4][0]<len && x+mDir[(d+i)%4][0]>=0 && y+mDir[(d+i)%4][1]<len
&& y+mDir[(d+i)%4][1]>=0 ) //不能超出数组范围
if ( s[y+mDir[(d+i)%4][1]][x+mDir[(d+i)%4][0]]==0 ) //发现合法空位
{ d=(d+i)%4; x+=mDir[d][0]; y+=mDir[d][1]; break; } //修改当前坐标和行进方向
if ( i>=4 ) break; //4个方向都找不到空位,结束
}
}
}
void main()
{ int s[N][N]={0},i,j;
StepOn(0,0,s,N);
for ( i=0;i<N;i++ ) { for ( j=0;j<N;j++ ) printf("%2d ",s[i][j]); printf("\n"); }
getch();
}
本程序的设计思路是:保持当前填充方向,如果是行进方向上有空位则填充,如果越界或是垂直、水平方向填充或越界则立即转向,直到所有方向均试过没有空位为止。
程序中用(d+i)%4的方法使当前方向d的顺序下几个方向都得到测试。既保持了当前方向又能测试所有未测过的方向。
⑤ C语言蛇形填充数组
按照你的要求编写的蛇形填充数组的C语言程序如下
#include<stdio.h>
intmain()
{
inta[100][100];
inti,j,k,n,flag=0,data=1;
scanf("%d",&n);
for(k=0;k<2*n;k++){
if(flag==1){
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(i==k-j){
a[i][j]=data++;
}
}
}
flag=0;
}else{
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(i==k-j){
a[j][i]=data++;
}
}
}
flag=1;
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(j==n-1)
printf("%d",a[i][j]);
else
printf("%d",a[i][j]);
}
printf(" ");
}
return0;
}
运行结果
4
1267
35813
491214
10111516
⑥ C语言编程:用蛇形让1个专业的学生分到3个班去
先存储中间班级,差为3.最后把剩下的,去掉头去掉尾,每两个添加到一个班,头尾最后处理就是了
那我用java给你写吧,一样的思路。稍等
⑦ 蛇形填数 用c语言
#include <stdlib.h>
#include <stdio.h>
void main()
{
int a[21][21], i, j, n;
scanf("%d", &n);
for( i=0; i<n; i++)
for (j=0; j<n; j++)
a[i][j] = -1;
int value = 1, max = n*n;
i = 0, j=n-1;
int inci = 1, incj = 0;
int nexti, nextj;
while(value <= max){
a[i][j] = value ++;
//printf("i=%d, j=%d value=%d\n",i, j, value-1);
nexti = i + inci;
nextj = j + incj;
if( nexti>n-1 || nexti<0 || nextj>n-1 || nextj<0 ||
a[nexti][nextj] != -1) {
if(inci==1 && incj==0) {
inci= 0, incj=-1;
}
else if(inci==0 && incj==-1) {
inci= -1, incj=0;
}else if(inci==-1 && incj==0) {
inci = 0, incj=1;
}else {
inci = 1, incj=0;
}
nexti = i+inci;
nextj = j+incj;
}
i = nexti;
j = nextj;
}
for (i=0; i<n; i++) {
for(j=0; j<n; j++) printf("%3d ", a[i][j]);
printf("\n");
}
}
-------
5
13 14 15 16 1
12 23 24 17 2
11 22 25 18 3
10 21 20 19 4
9 8 7 6 5
⑧ C语言写蛇形填数
#include <stdio.h>
#include <stdlib.h>
void func(int n)
{
int i, j, k;
int layer = (n+1) /2, max = n*n;
int **num;
num = (int**)malloc(sizeof(int*) * n);
for( i = 0; i < n; i++)
{
num[i] = (int*)malloc(sizeof(int) * n);
}
k = 1;
for(i = 0; i < layer; i++)
{
for(j = 0; j < n-i*2; j++)
{
num[j+i][n - 1 -i] = k++;
}
for(j = 0; j < n-i*2-1; j++)
{
num[n-i-1][n-2-i-j] = k++;
}
for(j = 0; j < n - i*2 -1; j++)
{
num[n-2-i-j][i] = k++;
}
for(j = 0; j < n - i*2 - 2; j++)
{
num[i][j+1+i]=k++;
}
}
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
printf("%3d", num[i][j]);
}
printf("\n");
}
for(i = 0; i < n; i++)
{
free(num[i]);
}
free(num);
}
void main()
{
int n;
printf("n = ");
scanf("%d", &n);
if(n > 100) n = 100;
func(n);
}
⑨ 求个C语言蛇形矩阵源代码,有解题思路更好
/********************************************************************************
给一个由英文大写字母组成的字符串,串长为n*n(0<n<11),请将这个按Z字形排列输出这个字符方阵。
比如:ABCDEFGHI,Z字形排成一个3*3的方阵如下:
ABF
CEG
DHI
输入
每行一个字符串。
输出
输出对应矩阵,每个矩阵之后有一个空行。
SampleInput
ABCDEFGHI
AAAABBBBCCCCDDDD
SampleOutput
ABF
CEG
DHI
AABB
ABBD
ACCD
CCDD
********************************************************************************/
#include<stdio.h>
#include<string.h>
#defineN11
inti,j;
intk;
intln;
intn;
chars[N*N];
chara[N][N];
voidgo_right(){
j++;
}
voidgo_left(){
j--;
}
voidgo_down(){
i++;
}
voidgo_up(){
i--;
};
voidleft_down(){
go_left();
go_down();
}
voidright_up(){
go_right();
go_up();
}
voidgo(){
while(1){
if(j+1<n){
go_right();a[i][j]=s[k];k++;//右移
if(k==ln+1)return;
}
else{
go_down();a[i][j]=s[k];k++;
if(k==ln+1)return;
}
while(1){//左下移动
left_down();
if(j>=0&&i<n){
a[i][j]=s[k];k++;
if(k==ln+1)return;
}
elsebreak;
}
j++;i--;//还原一步
if(i+1<n){
go_down();a[i][j]=s[k];k++;//向下
if(k==ln+1)return;
}
else{
go_right();a[i][j]=s[k];k++;//右移
if(k==ln+1)return;
}
while(1){//右上移动
right_up();
if(i>=0&&j<n){
a[i][j]=s[k];k++;
if(k==ln+1)return;
}
elsebreak;
}
i++;j--;//还原一步
}
}
voidprint(){
i=j=0;
for(i=0;i<n;i++){
for(j=0;j<n;j++)
printf("%c",a[i][j]);
printf(" ");
}
}
voidZ(chars[]){
ln=strlen(s);
n=(int)sqrt(ln);
k=0;
i=j=0;
a[i][j]=s[k];k++;
go();
print();
return;
}
intmain(){
while(scanf("%s",s)!=EOF){
Z(s);
}
return0;
}
以前写的,非常类似。希望能帮助到你。
⑩ C语言 蛇形矩阵填充
算法写错了,造成了死循环,不知道你的思路是什么,所以还是你自己调试最好