天天看點

2013-8-6學習練習

 1. 輸出和為一個給定整數的所有組合

   例如n=5

   5=1+4;5=2+3(相加的數不能重複)

   則輸出

   1,4;2,3。

#include<stdio.h>

const int MAX = 10;

int g[MAX],N,M;

int sum = 0;//和

void fun(int n,int m,int sumN)

{

for(int i=n;i>=1;i--)

g[m] = i;

if(m>1)

fun(i-1,m-1,sumN);

}

else

for(int j=1;j<=M;j++)

sum+=g[j];

if(sum == sumN)

printf("%d=",sum);

if(j<M)

printf("%d+",g[j]);

printf("%d",g[j]);

sum = 0;

printf("\n");

int main()

printf("請輸入和:");

scanf("%d",&N);

for(M=2;M<N;M++)

fun(N,M,N);

/*int i;

scanf("%d",&i);*/

return 0;

2013-8-6學習練習

2.  寫一段程式,找出數組中第k大小的數,輸出數所在的位置。例如{2,4,3,4,7}中,第一大的數是7,位置在4。第二   大、  第三大的數都是4,位置在1、3随便輸出哪一個均可。函數接口為:int find_orderk(const int* narry,const int n,const int k)

#include <stdio.h>

int fine_orderk(const int *narry,const int n,const int k)

    int j=0; //記錄第幾大的那個位置

    int number = 0; //記錄第幾大的那個數

    int sortedArray[8];

    //數組指派

    for (int i=0; i<8; i++) {

        sortedArray[i] = narry[i];

    }

    //新數組排序

        for (int j=0; j<8-i-1; j++) {

            if (sortedArray[j]<sortedArray[j+1]) {

//為什麼這樣不行

                //sortedArray[j]^=sortedArray[j+1]^=sortedArray[j];

                sortedArray[j] = sortedArray[j] ^ sortedArray[j+1];

                sortedArray[j+1] = sortedArray[j] ^ sortedArray[j+1];

            }

        }

        if (narry[i] == sortedArray[n-1]) {

            j = i;

            number = narry[i];

            break;

    printf("第%d大的數是%d,它在位置%d",n,number,++j);

    return 0;

int main(int argc, const char * argv[])

    printf("請輸入8個數:");

    int n=8;

    int array[8];

        scanf("%d",&array[i]);

    printf("您輸入的數組是:");

        printf("%d ",array[i]);

    int nn,kk=0;

    while (1) {

        printf("\n請輸入第幾大的數n(1<=n<=8):");

        scanf("%d",&nn);

        if (nn>=1&&nn<=8) {

            kk = fine_orderk(array, nn, kk);

        else

            printf("請輸入1-8之間的數!");

結果:

請輸入8個數:5 4 3 2 1 6 7 8

您輸入的數組是:5 4 3 2 1 6 7 8 

請輸入第幾大的數n(1<=n<=8):8

第8大的數是1,它在位置5

請輸入第幾大的數n(1<=n<=8):1

第1大的數是8,它在位置8

請輸入第幾大的數n(1<=n<=8):5

第5大的數是4,它在位置2

3.用遞歸算法判斷數組a[N]是否為一個遞增數組。

int jargeArray(int p[8],int n)

    if (n>0) {

            if (p[n]<p[n-1]) {

            return 0;

        jargeArray(p, --n);

        return 1;

    else

    printf("請輸入8個整數:");

    for (int i= 0; i<8; i++) {

    int f = jargeArray(array,7);

    if (0==f) {

        printf("不是遞增數組");

    {

        printf("是遞增數組");

請輸入8個整數:2 3 4 5 6 7 8 9

該數組是遞增數組

請輸入8個整數:1 2 4 3 6 5 8 7

該數組不是遞增數組

4.用指針的方法,将字元串“ABCD1234efgh”前後對調顯示

    char *p = "ABCD1234efgh";

    int i = strlen(p);

    char c[30]={'\0'};

    for (int j=0; j<i; j++) {

        c[j] = *p++;

    for (int j = 0; j<=i/2; j++) {

        c[j] = c[j]^c[i-j-1];

        c[i-j-1] = c[j]^c[i-j-1];

    //輸出列印

    printf("%s",c);

hgfe4231DCBA

5.輸入N, 列印 N*N 矩陣

比如 N = 3,列印:

1  2  3

8  9  4

7  6  5

N = 4,列印:

1   2   3   4

12  13  14  5

11  16  15  6

10  9   8   7 

//蛇形函數問題

#include<string.h>

void main()

    int i = 0,n,k = 1;

    printf("請輸入N:");

    scanf("%d",&n);  //

    //int j = n-1,

    int s[100][100];

    int m = 0;

    memset(s,0,sizeof(s));  //記憶體初始化

    while(k<=n*n)

        //從s[0][n-1]開始

//        while(i<=n-1&&s[i][j]==0&&k<=n*n) {s[i++][j] = k++;}

//        i--;//不然的話上面一行i++之後越過邊界了

//        j--;//不然會覆寫邊角的那個數

//        while(j>=0&&s[i][j]==0&&k<=n*n)  {s[i][j--] = k++;}

//        j++;

//        i--;

//        while(i>=0&&s[i][j]==0&&k<=n*n)  {s[i--][j] = k++;}

//        i++;

//        while(j<=n-1&&s[i][j]==0&&k<=n*n)  {s[i][j++] = k++;}

//        j--;

        //從s[0][0]開始

        while(m<=n-1&&s[i][m]==0&&k<=n*n) {s[i][m++] = k++;}

        i++;

        m--;

        while(i<=n-1&&s[i][m]==0&&k<=n*n)  {s[i++][m] = k++;}

        i--;

        while(m>=0&&s[i][m]==0&&k<=n*n)  {s[i][m--] = k++;}

        m++;

        while(i>=0&&s[i][m]==0&&k<=n*n)  {s[i--][m] = k++;}

    //列印輸出

    for(int x = 0;x<n;x++)

        for(int y = 0;y<n;y++)

        {

            if(s[x][y]<10)

                printf("%d  ",s[x][y]);

            else

                printf("%d ",s[x][y]);

        printf("\n");

2013-8-6學習練習
上一篇: set

繼續閱讀