30/09/2018, 17:43

Xóa cột có phần tử lớn nhất trong ma trận?

INPUT:

1
3 3
7 8 1
8 5 6
1 3 5

OUTPUT:

1
6
5

CODE:

#include<stdio.h>
#include<conio.h>
#include<math.h>
FILE *f1=fopen("m.inp","r");
FILE *f2=fopen("m.out","w");

main()
{
	int t,i,j,a[20][20],n,d,k,m,b[20][20];
	fscanf(f1,"%d
",&t);
	
	while(t--)
	{
		fscanf(f1,"%d%d",&n,&m);
		for(i=0;i<n;i++)
			for(j=0;j<m;j++)	
				fscanf(f1,"%d",&a[i][j]);	
		
		int i,j,max=a[0][0];
		for(i=0;i<n;i++)
			for(j=0;j<m;j++)
				if(a[i][j]>max) max=a[i][j];
		
		for(i=0;i<n;i++)
			for(j=0;j<m;j++)
				if(a[i][j]==max) 
				{
					d=i;
					k=j;
				}

		//Xoa cot co GTLN								
		for(i=0;i<n;i++)
		{
			for(j=0;j<m;j++)	
			{
				if(k==j) continue; 
				
				fprintf(f2,"%d ",a[i][j]);
			}	
			
			fprintf(f2,"
");	
		}
	} 
}

Vấn đề là code của e chỉ đúng nếu ma trận chỉ có 1 GTLN. Còn nếu ma trận có nhiều GTLN bằng nhau như INPUT trên thì e chưa nghĩ ra đc code ntn.

Gió viết 19:43 ngày 30/09/2018

Đầu tiên tìm max của ma trận, sau đó dùng 1 mảng cot để đánh dấu có max hay không. Sau đó chỉ cần in ra những cột không chứa max

Linh Trần viết 19:52 ngày 30/09/2018

B đánh cụ thể code như b nói đc k?

Gió viết 19:44 ngày 30/09/2018

chạy thử trên ideone

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <limits.h>

#define maxn  1001

int arr[maxn][maxn];
int m,n;
bool col[maxn];



int find_max(){
    int j,i;
    int ans=INT_MIN;
    for(j=0;j<m;j++){
        for(i=0;i<n;i++){
            if(arr[j][i]>ans){
                ans=arr[j][i];
            }
        }
    }
    return ans;
}

bool col_has_max(int col,int max_value){
    int j;
    for(j=0;j<m;++j){
        if(arr[j][col]==max_value){
            return true;
        }
    }
    return false;
}

int main(void) {
    int test;
    scanf("%d",&test);
    while(test--){
        // read arr
        scanf("%d%d",&m,&n);
        int i,j;
        for(j=0;j<m;++j){
            for(i=0;i<n;++i){
                scanf("%d",arr[j]+i);
            }
        }
        
        int max=find_max();
        
        for(i=0;i<n;++i){
            col[i]=col_has_max(i,max);
        }
        
        // in ma tran
        
        for(j=0;j<m;++j){
            for(i=0;i<n;++i){
                if(col[i]) continue; // col[i] chua max
                printf("%d ",arr[j][i]);
            }
            printf("\n");
        }
    }
    return 0;
}


Linh Trần viết 19:57 ngày 30/09/2018

Xin lỗi b mình chưa học đến C++. B chuyển giúp m về C đc k?

Gió viết 19:54 ngày 30/09/2018

đây là code C rồi mà bạn

Linh Trần viết 19:55 ngày 30/09/2018

Vậy à? Chắc có mấy từ mình chưa thấy bao h nên trông lạ,

Bài liên quan
0