① 用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語言 蛇形矩陣填充
演算法寫錯了,造成了死循環,不知道你的思路是什麼,所以還是你自己調試最好