1. THÔNG BÁO TUYỂN ADMIN DIỄN ĐÀN 2013
    Tìm kiếm nhà trọ - Ở ghép
    THÔNG BÁO BÁN ÁO SPKT.NET CHO THÀNH VIÊN DIỄN ĐÀN


    HÃY TÌM KIẾM Ở ĐÂY TRƯỚC KHI ĐẶT CÂU HỎI
    {xen:phrase loading}

[C++] Sắp xếp tăng dần theo ma trận zích zắc ^^

Thảo luận trong 'C/C++' bắt đầu bởi Dê con, 23 Tháng tư 2010.

  1. Dê con New Member

    Số bài viết: 1,272
    Đã được thích: 1
    Điểm thành tích: 0
    Mã:
    // [Tu-mang 2 chieu] Sap xep mang 2 chieu theo ma tran zich zac.cpp : Defines the entry point for the console application.
    //
    #include "stdafx.h"
    #include "conio.h"
    #include "string.h"
    #include "math.h"
    int a[50][50],n,b[100];
    #define duongdan "nhapmang.inp"
    
    void input();
    void output();
    void process();
    
    void input(){
        int k,i,c;
        k=0;i=0;
        FILE *fi;
        fi = fopen(duongdan,"rt");
        if (fi==NULL)
            printf("Thieu file du lieu \n");
        else 
        {
            do{
                fscanf(fi,"%d",&c);
            if(c>-9999)
            {
                i=i+1;
                b[i]=c;
            }
            else 
                break;
            }
            while (!feof(fi));
        }
        n=sqrt(double(i));
    }
    
    void process()
    {
        int j,i,k,flag,temp;
        //sap xep
        for (i=1; i<=n*n;i++)
            for (j=1;j<=n*n-1;j++)
            {
                if (b[j]>b[j+1])
                {
                    temp = b[j];
                    b[j]=b[j+1];
                    b[j+1]=temp;
                }
            }
    
    // sap xep theo hinh zich zac
            i=1; j=1;
            a[1][1]=b[1];
            flag =0;
            for (k=2;k<=n*n;k++){
            switch (flag)
            {
            case 0:
                {
                j=j+1;
                if (i==n)
                    flag=3;
                else 
                    flag=1;
                }
                break;
            case 1:
                {
                i=i+1;
                j=j-1;
                if ((i==n)||((j==1)&&(i==n)))
                    flag=0;
                else
                    if ((j==1))
                    flag =2;
                    }
                break;
            case 2:
                {
                i=i+1;
                if (j==1)
                    flag =3;
                else 
                    flag =1;
                }
                break;
            case 3:
                {
                i=i-1;
                j=j+1;
                if (j==n)
                    flag=2;
                else
                if (i==1)
                    flag=0;
                }
                break;
            }
            a[i][j]=b[k];
            }
    
    }
    
    void output(){
        int i,j;
        for(i=1;i<=n;i++){
            for (j=1;j<=n;j++)
                printf("%4d",a[i][j]);
        printf("\n");
        }
    }
    
    void main(){
        input();
        process();
        output();
    }
    
    
  2. spkt_099100 Member

    Số bài viết: 949
    Đã được thích: 0
    Điểm thành tích: 16
  3. lovelove1912 New Member

    Số bài viết: 341
    Đã được thích: 2
    Điểm thành tích: 0

Chia sẻ trang này