當前位置:首頁 » 操作系統 » 螺旋矩陣的演算法

螺旋矩陣的演算法

發布時間: 2023-07-24 14:24:41

① 急求,用C語言實現N階螺旋數字方陣,謝謝

1. 編程,統計在所輸入的50個實數中有多少個正數、多少個負數、多少個零。

2. 編程,計算並輸出方程X2+Y2=1989的所有整數解。

3. 編程,輸入一個10進制正整數,然後輸出它所對應的八進制、十六進制數。

4. 一個數如恰好等於它的因子之和,這個數就稱為「完數」。編程序找出1000以內的所有完數,並輸出其因子(6是一個"完數",它的因子是1,2,3)。

5. 輸入一個正整數,輸出它的所有質數因子(如180的質數因子為 2、2、3、3、5)。

6. 輸入20個整數存入一數組,輸出其中能被數組中其它元素整除的那些數組元素。

7. 輸入兩個數組(數組元素個數自定),輸出在兩個數組中都出現的元素(如a[5]=,b[6]=,則輸出3、5)。

8. 輸入兩個數組(數組元素個數自定),輸出在兩個數組中都不出現的元素(如a[5]=,b[6]=,則輸出2、4、6、3、7、9、10、-1)。

9.編程,將字元數組S2中的全部字元拷貝到字元數組S1中(不用strcpy函數)。

10.給定年份year,判別該年份是否閏年(定義一個宏以判別該年份是否閏年)。

11.輸入一行小寫字母後,將字母變成其下一字母(a變成b、b變成c、c變成d、…、x變成y、y變成z、z變成a)輸出。

12. 編寫一個函數,處理n行、n列的二維數組:將每一行的元素同除以該行上絕對值最大的元素。

13. 編寫函數,求任意階多項式 a0+a1X+a2X2+...+anXn 的值並返回多項式的值。

14. 設計一個函數,使給出一個數的原碼,能得到該數的補碼。

15. 編寫函數,求m行、n列的二維數組全體元素中負數的個數。

16. 編寫函數,返回在一個整數組中出現次數最多的數及其出現次數。

17.編一個程序,打入月份號,輸出該月的英文月名,要求用指針數組處理。

18.編寫遞歸函數,將輸入的字元串按與輸入相反的順序輸出。

19. 編寫函數,在n個元素的一維數組中,統計比相鄰元素大的數組元素個數並將統計數返回(不考慮a[0]和a[n-1]),要求以指針變數而不是數組名作參數。

20. 編寫函數,在n個元素的一維數組中,找出最大值、最小值並傳送到調用函數。

21. 編寫一個函數,統計m行n列二維數組中有多少個正數、多少個負數,多少個零,並返回統計結果。

22. 寫一函數,在給定的一行以"."結束的字元中,找出最長的單詞並輸出。

23. 編寫一個函數print,列印一個學生的成績數組,該數組中有5個學生的數據記錄,每個記錄包括num,name,score[3],用主函數輸入這些記錄,用print函數輸出這些記錄。

24. 把文本文件d1.dat復制到文本文件d2.dat中,要求僅復制d1.dat中的英文字元。

25. 編程,把文本文件d1.dat復制到d2.dat(其中空格字元不復制)。

26. 編程,把文本文件d1.dat復制到d2.dat(其中大寫英文字母要轉換為小寫字母)。

27. 把文本文件d1.dat復制到文本文件d2.dat中,要求僅復制d1.dat中除英文字元和數字以外的其它內容。

28. 求出1至100之間的素數(只能被1和自身整除的數)並順序寫入文件su.dat。

29.磁碟文件a1和a2,各自存放一個已按字母順序排好的字元串,編程合並二個文件到a3文件中,合並後仍保持字母順序(如a1中存放:"accel",a2中存放"ilrz",則a3中為"acceillrz")。

30.已知順序文件C.DAT 存放著程序設計基礎的考試成績,每個記錄包含學號(8位字元)和成績(三位整數)兩個數據項。編製程序,從文件中讀入學生成績,將大於或等於60分的學生成績再形成一個新的文件SCORE60.DAT保存在A盤上,並顯示出學生總人數(少於1000)、平均成績和及格人數。

31.已知head指向一個帶頭結點的單向鏈表,鏈表中每個結點包含數據域和指針域。請編寫程序實現如圖所示鏈表的逆置。

若原鏈表為:

head

a

b

C ∧

逆置後鏈表應為:

head

c

b

a ∧

32、編制函數實現在一個帶頭結點(head)的單向鏈表(數據有序)中刪除相同數據的結點(相同數據的結點只保留一個)。

33、編制一程序,將字元computer賦給一個字元數組,然後從第一個字母開始間隔的輸出該串。請用指針完成。

34、編制一程序,將字元串的第m個字元開始的全部字元復製成另一個字元串,要求在主函數中輸入字元串及m的值並輸出復制結果,在被調用函數中完成復制。

35、有4名學生每個學生考4門課程,要求在用戶輸入學生學號以後能輸出該生的全部成績,用指針型函數來實現。請編寫函數float *search().

main()

,,,};

float search(),p;

int I,m;

printf(「enter the number of student:」);

scanf(「%d」,&m);

printf(「the score of NO.%dare:\n」,m);

p=search(score,m);

for(I=0;I<4;I++)

printf(「%52f\t」,*(p+I));

}

float search(float (pointer)[4],int n)

{}

36、有4名學生每個學生考4門課程,要求在用戶找出有不及格課程的學生學號並輸出全部成績,用指針來實現。

37、編制一程序實現將十進制數轉換成二進制數,並存放於一維數組b中,然後輸出。

38、以下函數p的功能是用遞歸方法計算x的n階勒讓德多項式的值。已有有調用語句p(n,x);請編寫p函數。遞歸公式如下:

1

X

PX(X)=

((2N-1)*X* Pn-1(X)-(n-1)* Pn-2(X)/n

39、編程實現如下5*5階的螺旋方陣。

1
2
3
4
5

16
17
18
19
6

15
22
21
20
7

14
23
24
25
8

13
12
11
10
9

40、編一程序實現求所有不超過200的N值,N的平方是具有對稱性質的迴文數。所謂迴文數就是將一個數從左向右與從右向左讀是一樣的,例如34543和1234321都是迴文數。

41、編寫一函數實現將一個整數按逆序存放到一個數組中。

42、請編寫程序:從鍵盤輸入一個字元串,將其中的小寫字母全部轉換成大寫字母,輸出到磁碟文件「upper.txt」中去保存。輸入的字元串以「!」結束。

43、設文件number.dat中存放了一組整數。請編程統計並輸出文件中正整數、負整數和零的個數。

44、請編程:從鍵盤上讀入一個16進制無符號數m,調用函數rightrot將m中的原始數據循環右移n位。並輸出移位前後的內容。

45、設計一遞歸函數計算下列函數:

PX(X,N)=X-X2+X3-X4+……+(-1)N-1XN(N>0)

46、設計一遞歸函數計算x的n次方。

47、設計一遞歸函數實現將小於32768的整數按逆序輸出。

48、設計一遞歸函數實現將小於32768的整數按逆序輸出。

49、設計一遞歸函數實現如下函數:

ack(m,n)= n+1 當m=0時

ack(m-1,1) 當n=0時

ack(m-1,ack(m,n-1)) 當n>0,m>0時

50、設計一遞歸函數實現將任一正整數轉達換成二進制數。

② 誰有螺旋矩陣的說明

關於螺旋矩陣的說法不一,這里指的是形如
21 22................
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13
的矩陣。

問題有兩個:
1. 編程實現輸出這個矩陣
2. 設1點的坐標是(0,0),x方向向右為正,y方向向下為正.例如:7的坐標為(-1,-1) ,2的坐標為(0,1),3的坐標為(1,1).編程實現輸入任意一點坐標(x,y),輸出所對應的數字。

1. 第一個問題我是採用模擬進行構造的,可以看到從1開始的方向變化始終是 right->down->left->up,
所持續走的長度為1->1->2->2->3->3->...,發現了這個規律不難寫出代碼了!注意下面我把1的位置設置
在((n-1)/2, (n-1)/2)的位置。

void Simulate(int n)
{
int x, y;
x = y = (n - 1) / 2; //1的位置
data[x][y] = 1;
int len = 1;
int count = 0;
int num = 2;
DIRECTION dir = RIGHT;
while(num <= n * n)
{
for(int i = 0; i < len; i++)
{
switch(dir)
{
case LEFT:
--y; break;
case RIGHT:
++y; break;
case UP:
--x; break;
case DOWN:
++x; break;
default: break;
}
data[x][y] = num++;
}
count++;
if(count == 2)
{
count = 0;
len++;
}
dir = (DIRECTION)((dir + 1) % 4);
}
}

2. 第二個問題我也是先找出規律,然後進行模擬。
首先,不難看出n*n的螺旋矩陣的右下角的坐標一定是(m, m),這里m=n-1
通過觀察,可以看出 n=1的時候,右下角(0,0)的值為1,當n=2的時候,右下角(1,1)的坐標值為(3,3),當n=3的時候,右下角(2,2)的坐標值為13.直覺告訴我,這個值是關於n的二次函數,設f(n) = a*n^2 + b*n + c
聯立方程組,可以求得a,b,c。 最終算出來的f(n) = 4*n^2 - 2*n + 1
下面再根據(x,y)和右下角(n-1,n-1)之間的關系,計算出值即可。這里要注意當x的值與n-1相同時,應優先考慮y與-m是否有聯系。這就要求在函數中要注意x,y的判斷先後順序了。
代碼如下:

//以(1,1)所在位置作為原點,向右作為x正半軸,向下作為y正半軸
int GetValue(int x, int y)
{
int m = max(abs(x), abs(y));
int rightBottom = m * m * 4 - 2 * m + 1;
int value = 0;
if(x == -m)
{
value = rightBottom + 2 * m + m - y;
}
else if( y == m)
{
value = rightBottom + m - x;
}
else if(y == -m)
{
value = rightBottom + 4 * m + x + m;
}
else if( x == m )
{
value = rightBottom - (m - y);
}

return value;
}

③ 求一個C語言程序設計:螺旋矩陣.

螺旋矩陣:
#include<stdio.h>
main()
{
int a,b,k,n,i,j,a1,b1,m;
int lines[50][50];
scanf("%d",&n);
i=j=0;a=b=n;a1=b1=0;k=1;
if(n==1)
printf(" 1\n");
else
{
for(m=1;m<2*n;m++)
{
if(m%4==1)
{
for(;j<b;j++)
{
lines[i][j]=k;
k++;
}
i++;
j--;
b--;
}
else if(m%4==2)
{
for(;i<a;i++)
{
lines[i][j]=k;
k++;
}
j--;
i--;
a--;
}
else if(m%4==3)
{
for(;j>=b1;j--)
{
lines[i][j]=k;
k++;
}
i--;
j++;
b1++;
}
else
{
for(;i>=a1+1;i--)
{
lines[i][j]=k;
k++;
}
j++;
i++;
a1++;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{ if(j==0)printf(" %2d ",lines[i][j]);
else if(j==n-1)printf("%2d",lines[i][j]);
else
printf("%2d ",lines[i][j]);
}
printf("\n");
}
}
}
和的話加一下就是了;
至於你說的那些個積什麼的,比較麻煩。自己再弄弄吧。

熱點內容
手機上編寫c語言 發布:2025-03-15 08:17:53 瀏覽:753
上傳迅雷下載速度 發布:2025-03-15 08:07:50 瀏覽:553
好看解壓書 發布:2025-03-15 08:04:18 瀏覽:672
文字頁游源碼 發布:2025-03-15 08:02:29 瀏覽:315
怎麼看自己微信密碼 發布:2025-03-15 07:53:58 瀏覽:791
androidchecked 發布:2025-03-15 07:50:22 瀏覽:551
百度carplay怎麼連接安卓手機 發布:2025-03-15 07:49:39 瀏覽:24
捕捉圖片上傳 發布:2025-03-15 07:49:01 瀏覽:796
手機內核升級編譯 發布:2025-03-15 07:43:22 瀏覽:237
好java學校 發布:2025-03-15 07:43:22 瀏覽:136