多个整数排序

啊哈C语言!逻辑的挑战

P159.输入n个数,并将这n个数按照从小到大的顺序输出。

#include<stdio.h>
#include<stdlib.h>
int main(){
    //命名变量 
    int i,j,t,n;
    //输入比较数字的个数 
    scanf("%d",&n);
    //设定需要多少个数组 
    int a[n];
    //输入用于比较的数字 
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    //比较数字 
    for(i=0;i<n-1;i++){
        for(j=i+1;j<n;j++){
            if(a[i]>a[j]){
                t = a[i];a[i]=a[j];a[j]=t;
            }
        }
    }
    //输出从小到大的n位数数字 
    for(i=0;i<n;i++){
        printf("%d ",a[i]);
    }
    return 0;
} 

tips:
真讨厌这本书的作者的代码风格,单行的for循环不写{}直接用tab代替。

使用C生成随机数

啊哈C语言!逻辑的挑战

P142.如何随机生成一个1~20 000 000的随机数

#include<stdio.h>
#include<time.h>
int main(){
    int a,b,c;
    srand((unsigned)time(NULL));
    a = rand()/10;
    b = rand()/10;
    c = a * b;
    printf("%d",c);
    return 0;
} 

使用time函数生成的随机数范围是1~32767,那么32767整除10,再平方的结果就是10 732 176,在题目要求范围之内。

走迷宫

通过键盘上的w,a,s,d四个键控制一个小球走出迷宫。

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>

int main(){
    //画出迷宫 
    char a[7][7]={
        "######",
        "#O #  ",
        "# ## #",
        "#  # #",
        "##   #",
        "######"
    }; 

    int i;
    //定义坐标位置
    //x,y是起点的坐标 
    int x=1,y=1;
    //p,q是出口的坐标 
    int p=1,q=5;
    //定义数组 
    char ch;
    //把迷宫输出 
    for(i=0;i<6;i++){
        puts(a[i]);
    }   
    //当走出迷宫游戏结束
    //当游标不在出口位置 
    while(x!=p || y!=q){
        //读取当前字符 
        ch = getch();

        //定义s键,向下 
        if(ch == 's'){
            if(a[x+1][y]!='#'){
                a[x][y]=' ';
                x++;
                a[x][y]='O';
            }
        }

        //定义w键,向上 
        if(ch =='w'){
            if(a[x-1][y]!='#'){
                a[x][y]=' ';
                x--;
                a[x][y]='O';
            }
        }

        //定义a键,向左       
        if(ch =='a'){
            if(a[x][y-1]!='#'){
                a[x][y]=' ';
                y--;
                a[x][y]='O';
            }
        }

        //定义d键,向右       
        if(ch =='d'){
            if(a[x][y+1]!='#'){
                a[x][y]=' ';
                y++;
                a[x][y]='O';
            }
        }

        //q清屏 
        system("cls");
        //打印O的位置 
        for(i=0;i<6;i++){
            puts(a[i]);
        }
    }
    //终了,清屏,输出结果    
    system("cls");
    printf("You WIN!");
    sleep(5000);

    return 0;
}

三角形三条边上数字之和相等

啊哈C语言!逻辑的挑战

P135.用1-6这6个自然数组成一个三角形,并让这个三角形三条边上的数字之和想的ng.liru,如图所示的三角形中,三条边的值之和分别为:5+3+4、4+2+6、5+1+6都等于12.那么,现在请输出所有可能。


#include<stdio.h>
int main(){
    int a,b,c,d,e,f;
    for(a=1;a<7;a++){
        for(b=1;b<7;b++){
            for(c=1;c<7;c++){
                for(d=1;d<7;d++){
                    for(e=1;e<7;e++){
                        for(f=1;f<7;f++){
                            if(a!=b && a!=c && a!=d && a!=e 
                            && a!=f && b!=c && b!=d && b!=e 
                            && b!=f && c!=e  && c!=d && c!=f 
                            && d!=e && d!=f && e!=f){
                                if(a + b + c == 12){
                                    if(a + f + e ==12){
                                        if(e + d + c ==12){
                                            printf("%d %d %d %d %d %d \n"
                                            ,a,b,c,d,e,f);
                                        }
                                    }
                                }                               
                            }
                        }
                    }
                }

            }
        }
    }   
    return 0;
}

显示结果
4 2 6 1 5 3
4 3 5 1 6 2
5 1 6 2 4 3
5 3 4 2 6 1
6 1 5 3 4 2
6 2 4 3 5 1