题目链接: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("\n"); }*/ int sum=0; for(int i=0;i<n;i++){ sum+=pie[i][0]; } printf("%d\n",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("\n"); } 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\n",men[i],women[i]); } return 0; }
有两道题不会写,一道是动态规划,另一个则是数据范围比较大,待补充。