MENU

C语言应用作业 10

2017 年 11 月 23 日 • 日常作业

这是我的作业和我的答案,供将来自己检索,和大家参考之用。

1、两个乒乓球队进行比赛,各出三人。甲队为A、B、C三人,乙队为X、Y、Z三人。已抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X、Z比。请编程序找出三对赛手的名单。

#include <stdio.h>

int main()
{
    //这题用简单的数学一分析就有答案了
    printf("c vs y\na vs z\nb vs x\n");
}

2、用选择法对10个整数排序(从小到大)。

#include <stdio.h>

void cha(int which,int order,int arr[11]){ //which>=order
    int i,value=arr[which];
    for(i=which;i>order;i--) arr[i]=arr[i-1];
    arr[order]=value;
}
int findMin(int arr[],int from,int to){
    int i,min,minOrder;
    for(i=from;i<=to;i++){
        if(i==from){
            min=arr[from];
            minOrder=from;
        }else{
            if(arr[i]<min){
                min=arr[i];
                minOrder=i;
            }
        }
    }
    return minOrder;
}
int main()
{
    int arr[10],i;
    for(i=0;i<10;i++)
        scanf("%d",&arr[i]);
    for(i=0;i<10-1;i++)
        cha(findMin(arr,i,10-1),i,arr);
    for(i=0;i<10;i++)
        printf("%d ",arr[i]);
    printf("\n");
    return 0;
}

3、有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中(以两两交换的方式)。

#include <stdio.h>

void printa(int arr[],int leng){
    int i;
    for(i=0;i<leng;i++)
        printf("%d\t",arr[i]);
}
void insert(int arr[],int leng,int n,int order){
    int i;
    for(i=leng-1;i>=order;i--)
        arr[i+1]=arr[i];
    arr[order]=n;
}
int main()
{
    int arr[8]={-45,0,8,8,11,95,98749},leng=7,tmp; //以此为例
    printf("原数组为:\n");
    printa(arr,leng);
    int n,i;
    printf("\n请输入一个数:");
    scanf("%d",&n);
    if(leng==1){
        printf("抱歉,请使原数组多于一个数!");
    }else{
        insert(arr,leng,n,1);
        if(arr[0]<arr[leng-1]){ //原数组从小到大排列
            for(i=1;i<=leng;i++){
                if(arr[i-1]>arr[i]){
                    tmp=arr[i];
                    arr[i]=arr[i-1];
                    arr[i-1]=tmp;
                }
            }
        }else if(arr[0]>arr[leng-1]){
            for(i=1;i<=leng;i++){
                if(arr[i-1]<arr[i]){
                    tmp=arr[i];
                    arr[i]=arr[i-1];
                    arr[i-1]=tmp;
                }
            }
        }else{
            printf("抱歉,原数组的数都一样大!");
        }
    }
    printf("新数组:\n");
    printa(arr,leng+1);
    printf("\n");
    return 0;
}

4、有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

#include <stdio.h>
#define DEBUG 0
void printa(int arr[],int leng){
    int i;
    for(i=0;i<leng;i++){
        printf("%d\t",arr[i]);
    }
    printf("\n");
}
int main(){
    int n,i,j,que[50]={0};
    do{
        printf("n=");
        scanf("%d",&n);
        if(n<1) printf("错误:该数不是正数,程序将要求您重新输入!\n");
        else if(n>50) printf("错误:该程序最多仅支持50个人。程序将要求您重新输入!\n");
    }while(n<1||n>50);
    for(i=0;i<n;i++){
        que[i]=i+1;
    }
    if(DEBUG) printa(que,n);
    for(i=2;n>1;){
        if(DEBUG) printf("[去掉%d]",que[i]);
        for(j=i;j<n-1;j++){
            que[j]=que[j+1];
        }
        que[n-1]=0;
        n--;
        i+=3-1;
        while(i>n-1&&n!=1) i-=n;
        if(DEBUG) printa(que,n);
    }
    printf("No.%d left.\n",que[0]);
    return 0;
}

(此文系定时发布)

原发于 2016-12-22 23:42