输入的第一行包括两个整数m和n(1<=m,n<=100),分别代表矩阵的行和列的维数。 接下来的m行每行有n个数,代表矩阵的元素。
可能有多组测试数据,对于每组数据,输出按题目要求执行后的矩阵。
3 3 1 1 1 1 1 1 1 1 1 3 3 3 2 3 2 3 2 3 2 3
3 1 1 3 1 1 3 1 1 8 2 3 2 7 2 8 2 3
#include<iostream> #include<limits> using namespace std; //一次搞定,思路清晰 typedef struct Matrix { int line;//行 int row;//列 int value;//值 }; int main(void) { int m,n; while(cin >> m >> n) { Matrix matrix[m][n]; Matrix matrix_temp[m];//存储每行之和以及每行第一个最大数的位置 for(int i = 0;i < m;i++) matrix_temp[i].value = INT32_MIN; int sum;//计算每行之和 for(int i = 0;i < m;i++) { sum = 0; for(int j = 0;j < n;j++) { cin >> matrix[i][j].value; matrix[i][j].line = i; matrix[i][j].row = j; sum += matrix[i][j].value; if(matrix[i][j].value > matrix_temp[i].value)//找到每行第一个最大数 matrix_temp[i] = matrix[i][j]; } matrix_temp[i].value = sum; } for(int i = 0;i < m;i++)//对原矩阵重新赋值 { int line = matrix_temp[i].line; int row = matrix_temp[i].row; matrix[line][row].value = matrix_temp[i].value; } for(int i = 0;i < m;i++)//输出 { for(int j = 0;j < n;j++) cout << matrix[i][j].value << ' '; cout << endl; } } return 0; }
#include<stdio.h>//1.找到每行最大值的下标2.用整行和替换 int main() { int m,n,i,j,sum,max,index,a[100][1000]; scanf("%d%d",&m,&n);//输入 for(i=0;i<m;i++) for(j=0;j<n;j++) scanf("%d",&a[i][j]); for(i=0;i<m;i++)//找到每行的和 { sum=0;max=a[i][0];index=0; for(j=0;j<n;j++) { sum+=a[i][j]; if(a[i][j]>max)//此时得到相同最大值的下标也是前面的符合规定 { max=a[i][j];index=j;//最大值的下标 } } a[i][index]=sum; } for(i=0;i<m;i++) { for(j=0;j<n;j++) { printf("%d ",a[i][j]); } printf("\n"); } }
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { int n = scanner.nextInt(); int m = scanner.nextInt(); int[][] matrix = new int[n][m]; for (int i = 0; i < n; i++) { int max=Integer.MIN_VALUE; int index=0; int sum=0; for (int j = 0; j < m; j++) { int val = scanner.nextInt(); if (val>max){ max= val; index = j; } sum+= val; matrix[i][j]=val; } matrix[i][index]=sum; } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) System.out.print(matrix[i][j]+" "); System.out.println(); } } } }
#include <stdio.h> #include <stdlib.h> int main() { int m, n; while(scanf("%d%d", &m, &n) != EOF) { int a[m][n]; for(int i = 0; i < m; i++) { for(int j = 0; j < n; j++) scanf("%d", &a[i][j]); } int b[100] = {0}; for(int i = 0; i < m; i++) { int sum = 0; sum += a[i][0]; for(int j = 1; j < n; j++) { if(a[i][b[i]] < a[i][j]) b[i] = j; sum += a[i][j]; } a[i][b[i]] = sum; } for(int i = 0; i < m; i++) { for(int j = 0; j < n; j++) printf("%d ", a[i][j]); printf("\n"); } } return 0; }
/** *C++的多维数组,实际是数组的数组 * **/ #include <iostream> using namespace std; int main(){ int m,n,max,maxIndex,sum; cin>>m>>n; int **arr=new int*[m]; for(int i=0;i<m;++i){ arr[i]=new int[n]; for(int j=0;j<n;++j){ cin>>(arr[i])[j]; } max=(arr[i])[0]; sum=0; maxIndex=0; for(int k=0;k<n;++k){ if((arr[i])[k]>max){ maxIndex=k; max=(arr[i])[k]; } sum+=(arr[i])[k]; } (arr[i])[maxIndex]=sum; } for(int i=0;i<m;++i){ for(int j=0;j<n;++j) cout<<(arr[i])[j]<<' '; cout<<endl; delete [] arr[i]; } delete [] arr; return 0; }
//机试难度也不奢望这么简单了。。。边输入边遍历可以减少循环 #include<iostream> using namespace std; int main(){ int m,n; while(cin>>m>>n){ int **a=new int*[m]; for(int i=0;i<m;i++) a[i]=new int[n]; for(int i=0;i<m;i++){ int max=-999999,total=0,pos=0; for(int j=0;j<n;j++){ cin>>a[i][j]; if(a[i][j]>max){ max=a[i][j]; pos=j; } total+=a[i][j]; } a[i][pos]=total; } for(int i=0;i<m;i++){ for(int j=0;j<n-1;j++) cout<<a[i][j]<<" "; cout<<a[i][n-1]<<endl; } } }
#include<bits/stdc++.h>
int main(){
int m,n,a[100][100];
while(scanf("%d %d",&m,&n)!=EOF){
for(int i=0;i<m;i++){
int sum=0,mark=0,max=0;
for(int j=0;j<n;j++){
scanf("%d",&a[i][j]);
sum+=a[i][j];
if(a[i][j]>max){
max=a[i][j];
mark=j;
}
}
a[i][mark]=sum;
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++)
printf("%d ",a[i][j]);
printf("\n");
}
}
}
正常思路,一步一步来就行
#include<iostream>
using namespace std;
int main(){
int matrix[100][100];
int m, n;
while(cin >> m >> n){
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
cin >> matrix[i][j];
}
}
for(int i = 0; i < m; i++){
int max = matrix[i][0];
int sum = 0;
int max_index = 0;
for(int j = 0; j < n; j++){
if(max < matrix[i][j]){
max = matrix[i][j];
max_index = j;
}
sum += matrix[i][j];
}
matrix[i][max_index] = sum;
}
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
cout << matrix[i][j] << " ";
}
cout << endl;
}
}
return 0;
}
package com.speical.first;
import java.util.Scanner;
/**
* 矩阵的最大值
*
* 正常思路就行
* @author Special
* @time 2018/02/10 16:28:30
*/
public class Pro215 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
while(input.hasNext()) {
int m = input.nextInt();
int n = input.nextInt();
int[][] nums = new int[m][n];
int index, sum, max, num;
for(int i = 0; i < m; i++) {
index = 0;
sum = 0;
max = Integer.MIN_VALUE;
for(int j = 0; j < n; j++) {
num = input.nextInt();
if(num > max) {
index = j;
max = num;
}
sum += num;
nums[i][j] = num;
}
nums[i][index] = sum;
}
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
System.out.print((j == 0 ? "" : " ") + nums[i][j]);
}
System.out.println();
}
}
}
}
//看代码吧~ #include <iostream> #include <cstdio> using namespace std; long long nums[105]; int main(){ int m,n; long long sum; while(scanf("%d%d",&m,&n)!=EOF){ for(int i=0,max,point;i<m;++i){ max=-10000000;point=1;sum=0; for(int j=0;j<n;++j){ cin>>nums[j]; if(max<nums[j]){ max=nums[j]; point=j; } sum+=nums[j]; } nums[point]=sum; for(int j=0;j<n;++j)printf("%d%c",nums[j],j==n-1?'\n':' '); } } return 0; }
#include <iostream> #include <string.h> using namespace std; int main(){ int matrix[100][100],m,n; while(cin>>m>>n){ int i,j; for(i=0;i<m;i++) for(j=0;j<n;j++) cin>>matrix[i][j]; for(i=0;i<m;i++){ int max=0,sum=0; for(j=0;j<n;j++){ if(matrix[i][max]<matrix[i][j]) max=j; sum+=matrix[i][j]; } matrix[i][max]=sum; } for(i=0;i<m;i++){ for(j=0;j<n-1;j++){ cout<<matrix[i][j]<<" "; } cout<<matrix[i][n-1]<<endl; } } return 0; }
#include<stdio.h>
int main(void){
int m, n;
int arr[100][100];
while (scanf("%d%d", &m, &n) != EOF){
for (int i = 0; i < m; i++){
int max=0, sum = 0,index = 0;
for (int j = 0; j < n; j++){
scanf("%d", &arr[i][j]);
sum += arr[i][j];
if (max < arr[i][j]){
max = arr[i][j];
index = j;
}
}
arr[i][index] = sum;
}
for (int i = 0; i < m; i++){
for (int j = 0; j < n; j++)
printf("%d%s",arr[i][j],j==n-1?"\n":" ");
}
}
return 0;
}
//边输入边确定最大值可以不用多余的循环 #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int a, b; while (cin >> a >> b) { vector<vector<int>> array(a, vector<int>(b)); for (int i = 0; i < a; i++) { int sum = 0, max = 0; for (int j = 0; j < b; j++) { cin >> array[i][j]; sum += array[i][j]; if(array[i][j] > array[i][max]) max = j; } array[i][max] = sum; for (int j = 0; j < b; j++) { cout << array[i][j] << " "; } cout << endl; } } }
#include<stdio.h> int findmax(int a[],int n){ int max=a[0]; int index=0; for(int i=1;i<n;i++){ if(a[i]>max){ max=a[i]; index=i; } } return index; } int main(){ int m,n; while(scanf("%d%d",&m,&n)!=EOF){ int arr[100][100]; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ scanf("%d",&arr[i][j]); } } for(int i=0;i<m;i++){ int sum=0; for(int j=0;j<n;j++){ sum+=arr[i][j]; } int index=findmax(arr[i],n); arr[i][index]=sum; } for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(j!=n-1)printf("%d ",arr[i][j]); else printf("%d",arr[i][j]); } if(i!=m-1)printf("\n"); } } return 0; }