| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 858 人关注过本帖
标题:本人想到头炸的问题 要求递归做出下面的题
取消只看楼主 加入收藏
灬xiaoning
Rank: 2
等 级:论坛游民
帖 子:27
专家分:10
注 册:2010-7-24
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:1 
本人想到头炸的问题 要求递归做出下面的题
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册



题目:用递归做出 一个大的分成四个稍小一点的四个,然后每一个稍小一点的又分成四个更小一点的,然后又分成更小的
输出:可以组成正方形的边长45%的正方形不可以

[ 本帖最后由 灬xiaoning 于 2010-7-24 14:32 编辑 ]
搜索更多相关主题的帖子: 递归 
2010-07-24 07:39
灬xiaoning
Rank: 2
等 级:论坛游民
帖 子:27
专家分:10
注 册:2010-7-24
收藏
得分:0 
回复 3楼 perfume
可以的 我有代码 你帮我改改好吗  我不知道为什么 每次+4才可以得到答案
#include<stdio.h>
int pass;
typedef struct Corner
{
    int a;
    int b;
    int c;
    int d;
};
typedef struct Array
{
    int a[100][100];
    int b[100][100];
    int c[100][100];
    int d[100][100];
};
int GetCorner(int m[100][100],int n)
{
    int flag=0,mid=n/2+1;
    if(n%2!=0){
        if(mid%2!=0 || pass==0){
            if(flag++==0){
                Corner corner;
                corner.a =m[0][0];
                corner.b =m[0][n-1];
                corner.c =m[n-1][0];
                corner.d =m[n-1][n-1];
                printf("%d %d %d %d\n",corner.a,corner.b,corner.c,corner.d);
            }
            if(flag++==1){
                Corner corner;
                corner.a =m[0][0];
                corner.b =m[0][mid-1];
                corner.c =m[mid-1][0];
                corner.d =m[mid-1][mid-1];
                printf("%d %d %d %d\n",corner.a,corner.b,corner.c,corner.d);

            }
            if(flag++==2){
                Corner corner;
                corner.a =m[0][mid-1];
                corner.b =m[0][mid*2-2];
                corner.c =m[mid-1][mid-1];
                corner.d =m[mid-1][mid*2-2];
                printf("%d %d %d %d\n",corner.a,corner.b,corner.c,corner.d);
            }   
            if(flag++==3){
                Corner corner;
                corner.a =m[mid-1][0];
                corner.b =m[mid-1][mid-1];
                corner.c =m[mid-1][0];
                corner.d =m[mid*2-2][mid-1];
                printf("%d %d %d %d\n",corner.a,corner.b,corner.c,corner.d);
            }
            if(flag++==4){
                Corner corner;
                corner.a =m[mid-1][mid-1];
                corner.b =m[mid-1][mid*2-2];
                corner.c =m[mid*2-2][mid-1];
                corner.d =m[mid*2-2][mid*2-2];
                printf("%d %d %d %d\n",corner.a,corner.b,corner.c,corner.d);
            }
        }
    }
    return 0;
}
int Div_and_Put_Array(int A[100][100],int n)
{   
    Array sz;
    int i,j;
    while(n/2>1){
        for(i=0;i<=n/2;i++)
            for(j=0;j<=n/2;j++)
                sz.a [i][j]=A[i][j];
        GetCorner(sz.a ,n/2+1);        
        for(i=0;i<=n/2;i++)
            for(j=n/2;j<=n-1;j++)
                sz.b [i][j-n/2]=A[i][j];
        GetCorner(sz.b ,n/2+1);
        for(i=n/2;i<=n-1;i++)
            for(j=0;j<=n/2;j++)
                sz.c [i-n/2][j]=A[i][j];
        GetCorner(sz.c ,n/2+1);
        for(i=n/2;i<=n-1;i++)
            for(j=n/2;j<=n-1;j++)
                sz.d [i-n/2][j-n/2]=A[i][j];
        GetCorner(sz.d ,n/2+1);
        n/=2;
    }
    return 0;
}
int main()
{
    int  i,j,t,n;//n<=100
    int  Matrix[100][100];
    while(scanf("%d",&n)){
        if(n!=1){
            t=1;
            pass=0;
            if(n%2!=0){
                for(i=0;i<n;i++){
                    for(j=0;j<n;j++)
                        Matrix[i][j]=t++;
                }
                GetCorner(Matrix,n);
                Div_and_Put_Array(Matrix,n);
            }
            else
                printf("Can't get any square(s)!try another number!\n");
        }
        else
            printf("Can't get any square(s)!try another number!\n");
    }
    return 0;
}
2010-07-25 19:54
快速回复:本人想到头炸的问题 要求递归做出下面的题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024896 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved