软件工程研究生面试机试考题-2018

题目链接:https://acm.ecnu.edu.cn/contest/61/

解题方法,对二维数组的每一行进行从大到小的排序,然后将第一列数字(每行最大的数)加和

#include<stdio.h>
#include<algorithm>
using namespace std;
int pie[110][110];
bool cmp(int a,int b){
    return a>b;
}
int main(){
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            scanf("%d",&pie[i][j]);
        }
    }
    for(int i=0;i<n;i++){
        sort(pie[i],pie[i]+m,cmp);
    }
    /*输出测试 
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            printf("%d ",pie[i][j]);
        }
        printf("
");
    }*/ 
    int sum=0;
    for(int i=0;i<n;i++){
        sum+=pie[i][0];
    }
    printf("%d
",sum);
    return 0;
}

解题思路:杨辉三角,A[i][j]=A[i-1][j-1]+A[i-1][j],图形输出题需要观察找出规律,逐行输出。

#include<stdio.h>
int main(){
    int yh[21][21];
    //初始化
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            yh[i][j]=0;
        }
    }
    for(int i=0;i<n;i++){//第一竖行赋值 
        yh[i][0]=1;
    }
    for(int i=1;i<n;i++){//赋值 
        for(int j=1;j<=i;j++){
            yh[i][j]=yh[i-1][j-1]+yh[i-1][j];
        }
    } 
    for(int i=0;i<n;i++){
        for(int j=0;j<=i;j++){
            printf("%d",yh[i][j]);
            if(j!=i){
                printf(" ");//最后一个数字后无空格 
            } 
        }
        printf("
");
    }
    return 0;
} 

解题思路:字符串按字典序从大到小排序

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
bool cmp(string a,string b){
    return a>b;
}
int main(){
    string str[10001];
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>str[i];
    }
    sort(str,str+n,cmp);
    for(int i=0;i<n;i++){
        cout<<str[i];
    }
    cout<<endl;
    return 0;
}

解题方法:延长数组(利用周期循环)

#include<stdio.h>
int main(){
    int men[4000],women[4000];
    int m,n,k;
    scanf("%d%d%d",&m,&n,&k);
    int re1 = k/m+1;
    int re2 = k/n+1;
    int z=0,p=0;
    for(int i=0;i<re1;i++){
        for(int j=1;j<=m;j++){
            men[z]=j;
            z++;
        }
    }
    for(int i=0;i<re2;i++){
        for(int j=1;j<=n;j++){
            women[p]=j;
            p++;
        }
    }
    for(int i=0;i<k;i++){
        printf("%d %d
",men[i],women[i]);
    }
    return 0;
}

有两道题不会写,一道是动态规划,另一个则是数据范围比较大,待补充。

原文地址:https://www.cnblogs.com/nyist0/p/10233469.html