1. 程式人生 > >吉大軟體專碩976-2016年

吉大軟體專碩976-2016年

#include<stdio.h>
int main(){
    int find(int *a,int n,int k);
    int a[10]={18,3,6,9,4,5,3,2,8,1};//18,9,8,6,5,4,3,3,2,1
    int k;
    printf("請輸入K:");
    scanf("%d",&k);
    printf("第K大的數為:%d\n",find(a,10,k));
    return 0;
}
int find(int a[],int n,int k){
    int i,j,t;
    for(i=0;i<n;i++)//氣泡排序
        for(j=0;j<n-i-1;j++)
            if(a[j]<a[j+1]){
                t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
    return a[k-1];
}




#include<stdio.h>
#include <time.h>
#include <stdlib.h>
#define N 4
int main(){
    int *Add(int *a);
    int a[N]={1,1,1,1};
    int i;
    int *b = Add(a);
    printf("加一後:-------------------\n");
    if(b[N]!=0) printf("%d",b[N]);
    for(i=N-1;i>=0;i--)
        printf("%d",b[i]);
    printf("\n");
}
int *Add(int *a){
    int i;
    int *b=(int *)malloc((N+1)*sizeof(int));//加一後可能出現增加一位的情況,需要多開闢一個空間
    a[N-1]++;//加一
    for(i=N-1;i>0;i--){
        a[i-1] += a[i] / 2;
        a[i] = a[i] % 2;
        b[i] = a[i];
    }
    if(a[0]==2){//若結果多一位,放在b[0]
        b[1] = 0;
        b[0] = 1;
    }
    else b[1] = a[0];
        
    
    return b;
}

當a[N]中存放1011時


當a[N]中存放1111時


#include<stdio.h>
#define A 7//陣列a的長度
#define B 8//陣列b的長度
int main(){
    int *Interse(int a[],int b[],int min);
    int *Union(int a[],int b[],int max);
    int a[A]={0,1,0,1,0,1,1};// {1,3,5,6}
    int b[B]={0,0,0,1,1,1,0,1,1};// {3,4,5,7,8}
    int max,min,i;
    if(A>B){
        max = A;
        min = B;
    }else{
        max = B;
        min = A;
    }
    printf("交集為:\n");
    int *in = Interse(a, b, min);
    for(i=0;i<min;i++)
        printf("%d\t",in[i]);
    printf("\n並集為:\n");
    int *un = Union(a, b, max);
    for(i=0;i<max;i++)
        printf("%d\t",un[i]);
    printf("\n");
}
int *Interse(int a[],int b[],int min){
    int i;
    int *interse = (int *)malloc(min * sizeof(int));
    for(i=0;i<min;i++){
        if(a[i] == b[i])
            interse[i] = a[i];
        else
            interse[i] = 0;
    }
    return interse;
}
int *Union(int a[],int b[],int max){
    int i;
    int *unio = (int *)malloc(max * sizeof(int));
    for(i=0;i<max;i++){
        if(a[i]==1 || b[i]==1)
            unio[i] = 1;
        else
            unio[i] = 0;
    }
    return unio;
}


思路:

1、第一位word[0]只能是Y|N|2

2、若word[I]=Y|N => word[i+1]只能為Y|N|2

     若word[I]=2    => word[i+1]只能為y|n|1|空

     若word[I]=y|n  => word[i+1]只能為y|n|1

     若word[I]=1     => word[i+1]只能為Y|N|2|空

滿足以上兩條則是兩機器人對話,否則不是

#include<stdio.h>
#include<stdbool.h>
#define N 100
int main(){
    bool jude(char talk[]);
    char talk[N];
    printf("輸入對話:");
    gets(talk);
    if(jude(talk))
        printf("是兩機器人的對話");
    else
        printf("不是兩機器人的對話");
    printf("\n");
}
bool jude(char talk[]){
    int i;
    if(talk[0]!='Y' && talk[0]!='N' && talk[0]!='2')
        return false;
    for(i=0;talk[i]!='\0';i++){
        if(talk[i]=='Y'||talk[i]=='N'){
            if(talk[i+1]!='Y'&&talk[i+1]!='N'&&talk[i+1]!='2')
                return false;
        }else if(talk[i]=='2'){
            if(talk[i+1]!='y'&&talk[i+1]!='n'&&talk[i+1]!='1'&&talk[i+1]!='\0')
                return false;
        }else if(talk[i]=='y'||talk[i]=='n'){
            if(talk[i+1]!='y'&&talk[i+1]!='n'&&talk[i+1]!='1')
                return false;
        }else if(talk[i]=='1'){
            if(talk[i+1]!='Y'&&talk[i+1]!='N'&&talk[i+1]!='2'&&talk[i+1]!='\0')
                return false;
        }else
            return false;
    }
    return true;
}