题目如下:
定义一个正整数n和m,n代表输入的数字位数,m代表输入的进制数。如下输入格式
样例输入
5 5
4 4 1 1 1
4 3 0 1 2
样例输出
4 4 3 3 2
第一个5代表n,第二个5代表进制为6.
4 4 1 1 1与4 3 0 1 2代表输入的数字,
4 4 3 3 2是由这两个数字的每一位重排序后的每位数分别相加再取模得到的最大值
提示:
4 4 1 1 1排序后得 1 4 1 4 1
4 4 3 3 2排序后得 3 0 2 4 1
每位数相加再取模运算得
4 4 3 3 2
解题代码如下:
#include<stdio.h>
#include<malloc.h>
int main(){
int n;//位数
int m;//m进制
scanf("%d",&n);
scanf("%d",&m);
int *N;
int *M;
N=(int *)malloc(n*sizeof(int));
M=(int *)malloc(n*sizeof(int));
int i;
for(i=0;i<n;i++){
scanf("%d",&N[i]);
}
for(i=0;i<n;i++){
scanf("%d",&M[i]);
}
int b[100];
int j;
int k=0;
int max=-1;
int temp;
int temp_i;
int temp_j;
int p;
for(p=0;p<n;p++){//每一次循环,求得最大的数
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if((N[i]!=-1)&&(M[j]!=-1)){
temp=(N[i]+M[j])%m;
if(temp>max){
max=temp;
temp_i=i;
temp_j=j;
}
}
}
}
b[k]=max;
k++;
N[temp_i]=-1;//遍历过的的元素置为-1
M[temp_j]=-1;
max=-1;
}
for(i=0;i<n;i++){
printf("%d ",b[i]);
}
return 0;
}