1. c語言,蛇形矩陣
#include <stdio.h>
int main(){
//該程序雖然能通過評測系統的檢測,但時間復雜度為O(n^3),因而有待改進
int i,j,k,N; //矩陣階數
int a[11][11]; //N階矩陣
int count=0; //矩陣元素值,初始為0
scanf("%d",&N);
for(i=1;i<=2*N-1;i++){ //N階方陣有2*N-1條反對角線,依次遍歷之
if(i%2!=0){ //當對角線編號為奇數時,各元素按此對角線上的矩陣各元素下標之和從小到大的順序排列
for(j=1;j<=N;j++)
for(k=1;k<=N;k++){
if(j+k==i+1) a[j][k]=++count; //各元素的下標之和==對角線編號+1
}
}
else{ //當對角線編號為偶數時,各元素按此對角線上的矩陣各元素下標之和從大到小的順序排列
for(int j=N;j>=1;j--)
for(int k=N;k>=1;k--){
if(j+k==i+1) a[j][k]=++count; //各元素的下標之和==對角線編號+1
}
}
}
for(i=1;i<=N;i++)
for(j=1;j<=N;j++){
if(j!=N)
printf("%4d",a[i][j]);
else
printf("%4d\n",a[i][j]);
}
return 0;
}
2. 求個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;
}
以前寫的,非常類似。希望能幫助到你。
3. 用c語言輸出蛇形矩陣,我是新手,自己亂想了一個,覺得應該是對的,但輸不出,求糾正!!!
其實蛇形數組是有規律可尋的只要2個循環就可以。
蛇形數組你可以看做是一個個正方形做成的,而沒有一個正方形又有四個邊。
所以第一個循環控制正方形的個數,在第一個循環裡面就是第二個循環了,這個就是對應四個邊了,所以就有四個小的循環,這樣就可以模擬蛇形數組了。
下面給你寫寫我的代碼:
#include <stdio.h>
#define MAX 10
int a[MAX][MAX];
int main() //既然你這里寫的是int main,那麼你在最後就必須要加上一個return 0;
{
int i,j,n,t;
n = (MAX+1)/2;
t = 0;
for (i=0; i<n; i++)//第一個循環控制個數
{
for(j=i; j<MAX-i-1; j++)//上行
{
t++;
a[i][j] = t;
}
for(j=i; j<MAX-i-1; j++)//右列
{
t++;
a[j][MAX-i-1] = t;
}
for(j=MAX-i-1; j>i; j--)//下行
{
t++;
a[MAX-i-1][j] = t;
}
for(j=MAX-i-1; j>i; j--)//左列
{
t++;
a[j][i] = t;
}
}
for (i=0; i<MAX; i++)
{
for (j=0;j<MAX;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
4. C語言 蛇形矩陣問題
代碼如下:
#include<stdio.h>
intmain()
{
intn;
staticinta[100][100];
inti=0,j=0;
intk,x,y;
//printf("請輸入整數N,N<=100 ");
scanf("%d",&n);
for(k=1;k<=n*n;k++)
{
a[i][j]=k;
if((i+j)%2==0)
{
if(i!=n-1&&j!=0)
{
i=i+1;
j=j-1;
}
elseif(i==n-1)
{
//j=j+1;
break;
}
else
{
i=i+1;
}
}
else
{
if(i!=0&&j!=n-1)
{
i=i-1;
j=j+1;
}
elseif(j==n-1)
{
break;
//i=i+1;
}
else
{
j=j+1;
}
}
}
for(x=0;x<n;x++)
{
for(y=0;y<n-x;y++)
{
if(y==(n-x-1))
printf("%d",a[x][y]);
else
printf("%d",a[x][y]);
}
printf(" ");
}
return0;
}
你測試下,看對不對?
5. 用C語言寫一個如下示例格式的蛇形矩陣,程序還有問題,怎麼把它完善有圖。
你的C語言蛇形矩陣的程序,只需要改兩處就沒有問題了.
完整的蛇形矩陣程序如下(改動的地方見注釋)
#include<stdio.h>
voidmain()
{
intn;
printf("請輸入蛇形矩陣的行數n(n≤100): ");
scanf("%d",&n);
inta[100][100]={0},i,j,k,l,m;
for(i=0,j=0,l=1;j<n;j++,l++)
a[i][j]=l*(l+1)/2;
for(i=1,j=0,k=2;i<n;k++,i++)
a[i][j]=(k*k-k+2)/2;
for(i=1,k=1,m=3;i<n-1;i++,k++,m++)//這里把i<n-k;改成i<n-1;
{
for(j=1;j<n-k;j++)
{
if(j==1)
{a[i][j]=a[i][0]+m;continue;}
a[i][j]=a[i][j-1]+m+(j-1);
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)//這里把j<n;改成j<n-i;
{
if(a[i][j]==0)
a[i][j]=' ';
printf("%d",a[i][j]);}
printf(" ");
}
}
運行結果
6. 用C語言輸出一個N階蛇形矩陣(隨意輸出n*n個數之後,不要從1開始的,是自己任意輸出的n*n個數)。
#include <stdlib.h>
#include <stdio.h>
#include <time.h> /*用到了time函數,所以要有這個頭文件*/
int main( void)
{
int i,j,MAX;
int number[400][400] = {0};
printf("請輸入一個整數:\n");
scanf("%d",&MAX);
srand((unsigned) time(NULL)); /*播種子*/
for(i = 0; i < MAX; i++)
{
for (j=0;j<MAX;j++)
{
number[i][j] = rand() % 1000; /*產生1000以內的隨機整數*/
printf("%5d ", number[i][j]);
}
printf("\n");
}
return 0;
}
這個是隨機產生矩陣的值,注意輸入的N 請不要超過400......有問題可以MM我,
7. C語言蛇形矩陣代碼
啥叫「蛇形矩陣」?是下面這個嗎?不是請說明一下。
#include"stdio.h"
#defineN6
intmain(void){
chara[N][N],i,j,k;
for(k=1,i=0;i<6;i++)
if(i&1)
for(j=5;j>=0;a[i][j--]=k++);
else
for(j=0;j<6;a[i][j++]=k++);
for(i=0;i<6;i++){
for(j=0;j<6;printf("%3d",a[i][j++]));
printf(" ");
}
return0;
}
8. C語言 蛇形矩陣源程序寫法
1 3 4
2 5
6。。。。
這是有規律的,1,2,3,4,5,6.。。。。位置也有規律。程序有解釋。所以我們可以
用數組來實現。
程序和解釋如下:
#include"stdio.h"
voidmain()
{
inta[20][20],i,j,c=1,x=1,n,s=0;
printf("請輸入n的值: ");
scanf("%d",&n);
while(c<=n*(n+1)/2)
{
for(i=s,j=0;i>=0,j<=s;i--,j++)
{
if(s%2!=0)a[i][j]=c++;//無論n值為多少,規律(奇偶性與遞增遞減之間的關系)不變。
elsea[j][i]=c++;
}
s++;
}//此為左上部分。
while(c<=n*n)
{
for(i=x,j=s-1;i<=s-1,j>=x;i++,j--)
{
if(n%2==0)/*這里因為n值的奇偶性影響了規律(奇偶性與遞增遞減之間的關系)
所以要對n值得奇偶性進行判定*/
{
if(x%2!=0)a[i][j]=c++;
elsea[j][i]=c++;
}
else
{
if(x%2==0)a[i][j]=c++;
elsea[j][i]=c++;
}
}
x++;
}//此為右下部分。
for(i=0;i<n;i++)//輸出二維數組a[n][n],輸出蛇形矩陣。
{
for(j=0;j<n;j++)
printf("%3d",a[i][j]);
printf(" ");
}
}
9. c語言蛇形矩陣。 輸入n輸出矩陣 例如輸入3 輸出 167 258 349
//以前寫得,按蛇形增長方向給每個位置賦值#include#includeint*p=NULL;//當前位置int*s=NULL;//開始位置intn=0;intfunc(intnum,intway){if(num==n*n+1)return0;*p=num;switch(way)//四個方向,下,斜上,右,斜下{case0://向下時下一個位置在p+n處,如當前位置是a[1][0],下個位置應該是a[2][0],中間相差n個數據p=p+n;if((p-s)%n==0)way=1;//下個方向要麼是斜上,要麼斜下,由當前是上三角還是下三角決定elseway=3;break;case1:p=p-n+1;if(p-s
10. C語言,蛇形矩陣
#include
<stdio.h>
int
main(){
//該程序雖然能通過評測系統的檢測,但時間復雜度為O(n^3),因而有待改進
int
i,j,k,N;
//矩陣階數
int
a[11][11];
//N階矩陣
int
count=0;
//矩陣元素值,初始為0
scanf("%d",&N);
for(i=1;i<=2*N-1;i++){
//N階方陣有2*N-1條反對角線,依次遍歷之
if(i%2!=0){
//當對角線編號為奇數時,各元素按此對角線上的矩陣各元素下標之和從小到大的順序排列
for(j=1;j<=N;j++)
for(k=1;k<=N;k++){
if(j+k==i+1)
a[j][k]=++count;
//各元素的下標之和==對角線編號+1
}
}
else{
//當對角線編號為偶數時,各元素按此對角線上的矩陣各元素下標之和從大到小的順序排列
for(int
j=N;j>=1;j--)
for(int
k=N;k>=1;k--){
if(j+k==i+1)
a[j][k]=++count;
//各元素的下標之和==對角線編號+1
}
}
}
for(i=1;i<=N;i++)
for(j=1;j<=N;j++){
if(j!=N)
printf("%4d",a[i][j]);
else
printf("%4d\n",a[i][j]);
}
return
0;
}