2013-8-6学习练习

简介:  1. 输出和为一个给定整数的所有组合    例如n=5    5=1+4;5=2+3(相加的数不能重复)    则输出    1,4;2,3。#includeconst int MAX = 10;int g[MAX],N,M;int sum =...
 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); for(int j=1;j<=M;j++) { if(j<M) { printf("%d+",g[j]); } else { printf("%d",g[j]); } } sum = 0; printf("\n"); } else { sum = 0; } } } } int main() { printf("请输入和:"); scanf("%d",&N); for(M=2;M<N;M++) { fun(N,M,N); } /*int i; scanf("%d",&i);*/ return 0; }

 


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 i=0; i<8; 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];

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

            }

        }

    }

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

        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];

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

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

    }

    printf("您输入的数组是:");

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

        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之间的数!");

    }

    return 0;

}

结果:

请输入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]是否为一个递增数组。

#include <stdio.h>

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

{

    if (n>0) {

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

            return 0;

        }

        jargeArray(p, --n);

        return 1;

    }

    else

        return 1;

}

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

{

    int array[8];

    printf("请输入8个整数:");

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

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

    }

    int f = jargeArray(array,7);

    if (0==f) {

        printf("不是递增数组");

    }

    else

    {

        printf("是递增数组");

    }

    return 0;

}

结果:

请输入8个整数:2 3 4 5 6 7 8 9

该数组是递增数组

请输入8个整数:1 2 4 3 6 5 8 7

该数组不是递增数组


4.用指针的方法,将字符串“ABCD1234efgh”前后对调显示

#include <stdio.h>

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

{

    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];

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

    }

    //输出打印

    printf("%s",c);

    return 0;

}

结果:

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<stdio.h>

#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++;

//        j++;

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

//        i++;

//        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++;}

        m--;

        i--;

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

        i--;

        m++;

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

        i++;

        m++;

    }

    

    //打印输出

    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作业 - 蓬莱仙羽 - 蓬莱仙羽

 

相关文章
|
4月前
学习使用按位取反~
学习使用按位取反~。
33 6
|
5月前
VMCS学习
VMCS学习
学习的一些知识
这段内容主要是关于个人承诺将把自己学到的知识分享到阿里云平台,以提供更多的学习经验和资源给其他用户。通过这种分享和交流的方式,希望能够帮助到更多在阿里云平台上学习的人们,一起共同进步和成长。
|
8月前
学习putpixel画点
【6月更文挑战第30天】学习putpixel画点。
43 1
|
数据安全/隐私保护
实用分享-学习资料下载器
实用分享-学习资料下载器
|
机器学习/深度学习 设计模式 算法
学习之路九阴真经(一)
学习之路九阴真经
86 0
|
NoSQL Java jenkins
|
设计模式 安全 Java
【鸟瞰】C#的学习
前言: 在软件工程之C/S学习的过程中,我们已经学习过了软件工程,文档,九种UML图。下一个学习小阶段是C#和设计模式,视频里的老师上来就讲“.NET”,还说应该念成“dot Net”,念成“点NET”实在是太不专业了。我突然有点蒙圈了,为啥在这个阶段要学习C#?学C#为啥还和“dot Net”有关?怎么这么多C?什么C语言?C ++?C#?这些都是些什么鬼?晕!!! 于是开始在培养计划中寻找答案。。。
112 0
|
程序员 编译器 C++
C++学习——前进(三)
C++学习——前进(三)
96 0
C++学习——前进(三)
|
SQL 弹性计算 关系型数据库
冬季实战营学习总结
冬季实战营学习总结
150 0