| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 689 人关注过本帖
标题:关于c语言的题目高手进来
只看楼主 加入收藏
qq8801103
Rank: 5Rank: 5
来 自:苏州中科大软件学院
等 级:职业侠客
威 望:1
帖 子:422
专家分:340
注 册:2009-10-8
结帖率:73.96%
收藏
已结贴  问题点数:10 回复次数:10 
关于c语言的题目高手进来
输入3的时候   
        7 8 9
        6 1 2
        5 4 3
输入4的时候
        7  8  9  10
        6  1  2  11
        5  4  3  12
        16 15 14 13
n 不限制 n是输入的数  如2,3,4
搜索更多相关主题的帖子: c语言 
2010-04-17 14:37
kingsroot
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:284
专家分:1159
注 册:2010-3-28
收藏
得分:3 
#include <stdio.h>
#include <stdlib.h>

void first( int );
void second( int );

void second( int number )//输入的是偶数
{
     int *ptr;
     
     ptr = (int *)malloc( number * number * sizeof( int ));
     if( ptr == NULL )
     {
         perror( "mem:" );
         exit(1);
     }
     int row=number/2, col=number/2;//如果是4,则row为1,col为1
     int Number = 1;
     ptr[row * number + col ] = Number;//首先初始化 指向的地址为ptr[5],正确
     
     
     int i,j;
     int temp = 1;
     //如果temp为1,则对col执行加操作,对row执行加操作
     for(i = 1; i <= number - 1; i++ )
     {
           if( temp )
           {
               for( j = 1;j <= i; j++)
               {++col;
               ptr[row*number + col] = ++Number;}
               for( j = 1;j <= i; j++)
               {++row;
               ptr[row*number + col] = ++Number;}
           }
           else
           {
               for( j = 1;j <= i; j++)
               {--col;
               ptr[row*number + col] = ++Number;}
               for( j = 1;j <= i; j++)
               {--row;
               ptr[row*number + col] = ++Number;}
           }
           temp = !temp;
     }
     
     for( i = 0; i < number; i++)
     {
          ptr[ i ] = Number++;
     }//为上面的代码只能成对执行,而偶数的时候,最后一行不能赋值不能执行
     
     for( i = 0; i< number *number; i++)
     {
          if( i % number == 0)printf("\n");
          printf("%02d ", ptr[i] );
     }
     free (ptr );
               
}  

void first( int number )//输入的是偶数
{
     int *ptr;
     
     ptr = (int *)malloc( number * number * sizeof( int ));
     if( ptr == NULL )
     {
         perror( "mem:" );
         exit(1);
     }
     int row=number/2 - 1, col=number/2 - 1;//如果是4,则row为1,col为1
     int Number = 1;
     ptr[row * number + col ] = Number;//首先初始化 指向的地址为ptr[5],正确
     
     
     int i,j;
     int temp = 1;//flags变量
     //如果temp为1,则对col执行加操作,对row执行加操作
     for(i = 1; i <= number - 1; i++ )
     {
           if( temp )
           {
               for( j = 1;j <= i; j++)
               {++col;
               ptr[row*number + col] = ++Number;}
               for( j = 1;j <= i; j++)
               {++row;
               ptr[row*number + col] = ++Number;}
           }
           else
           {
               for( j = 1;j <= i; j++)
               {--col;
               ptr[row*number + col] = ++Number;}
               for( j = 1;j <= i; j++)
               {--row;
               ptr[row*number + col] = ++Number;}
           }
           temp = !temp;
     }
     
     for( i = number - 1; i >= 0; i--)
     {
          ptr[(number - 1) *  number + i ] = Number++;//因为上面的代码只能成对执行,而偶数的时候,最后一行不能赋值不能执行
     }
     
     for( i = 0; i< number *number; i++)
     {
          if( i % number == 0)printf("\n");
          printf("%02d ", ptr[i] );
     }
     free( ptr );
               
}   

int main( void )
{
    printf("输入你要的数:");
    int n;
    scanf("%d", &n );
    printf("你输入的数是:%d\n", n );
   
    switch( n%2 )
    {
            case 0:
                 {first( n );
                 break;
                 }
            case 1:{
                 second( n );
                  break;
                  }
            default: break;
    }
    return 0;
}
2010-04-17 16:56
王启元
Rank: 2
等 级:论坛游民
帖 子:13
专家分:22
注 册:2010-4-12
收藏
得分:0 
高手!
2010-04-17 17:51
qq8801103
Rank: 5Rank: 5
来 自:苏州中科大软件学院
等 级:职业侠客
威 望:1
帖 子:422
专家分:340
注 册:2009-10-8
收藏
得分:0 
2楼的真牛啊 佩服

Discuz!  
好好学习  天天向上
2010-04-17 22:05
qq8801103
Rank: 5Rank: 5
来 自:苏州中科大软件学院
等 级:职业侠客
威 望:1
帖 子:422
专家分:340
注 册:2009-10-8
收藏
得分:0 
我怎么运行不出来啊

Discuz!  
好好学习  天天向上
2010-04-17 22:10
kingsroot
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:284
专家分:1159
注 册:2010-3-28
收藏
得分:0 
我调试过了的  怎么会不出来了~~~~
2010-04-17 22:12
qq8801103
Rank: 5Rank: 5
来 自:苏州中科大软件学院
等 级:职业侠客
威 望:1
帖 子:422
专家分:340
注 册:2009-10-8
收藏
得分:0 
你用的是什么工具

Discuz!  
好好学习  天天向上
2010-04-17 23:14
kingsroot
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:284
专家分:1159
注 册:2010-3-28
收藏
得分:5 
我用的GCC,你是用的什么工具??
你是编译没有过 还是什么其他原因~~~你把原因发下
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

void first( int );
void second( int );

void second( int number )//输入的是偶数
{
     int *ptr;
     
     ptr = (int *)malloc( number * number * sizeof( int ));
     if( ptr == NULL )
     {
         perror( "mem:" );
         exit(1);
     }
     int row=number/2, col=number/2;//如果是4,则row为1,col为1
     int Number = 1;
     ptr[row * number + col ] = Number;//首先初始化 指向的地址为ptr[5],正确
     
     
     int i,j;
     int temp = 1;
     //如果temp为1,则对col执行加操作,对row执行加操作
     for(i = 1; i <= number - 1; i++ )
     {
           if( temp )
           {
               for( j = 1;j <= i; j++)
               {++col;
               ptr[row*number + col] = ++Number;}
               for( j = 1;j <= i; j++)
               {++row;
               ptr[row*number + col] = ++Number;}
           }
           else
           {
               for( j = 1;j <= i; j++)
               {--col;
               ptr[row*number + col] = ++Number;}
               for( j = 1;j <= i; j++)
               {--row;
               ptr[row*number + col] = ++Number;}
           }
           temp = !temp;
     }
     
     for( i = 0; i < number; i++)
     {
          ptr[ i ] = Number++;
     }//为上面的代码只能成对执行,而偶数的时候,最后一行不能赋值不能执行
     
     for( i = 0; i< number *number; i++)
     {
          if( i % number == 0)printf("\n");
          printf("%02d ", ptr[i] );
     }
     free (ptr );
               
}  

void first( int number )//输入的是偶数
{
     int *ptr;
     
     ptr = (int *)malloc( number * number * sizeof( int ));
     if( ptr == NULL )
     {
         perror( "mem:" );
         exit(1);
     }
     int row=number/2 - 1, col=number/2 - 1;//如果是4,则row为1,col为1
     int Number = 1;
     ptr[row * number + col ] = Number;//首先初始化 指向的地址为ptr[5],正确
     
     
     int i,j;
     int temp = 1;//flags变量
     //如果temp为1,则对col执行加操作,对row执行加操作
     for(i = 1; i <= number - 1; i++ )
     {
           if( temp )
           {
               for( j = 1;j <= i; j++)
               {++col;
               ptr[row*number + col] = ++Number;}
               for( j = 1;j <= i; j++)
               {++row;
               ptr[row*number + col] = ++Number;}
           }
           else
           {
               for( j = 1;j <= i; j++)
               {--col;
               ptr[row*number + col] = ++Number;}
               for( j = 1;j <= i; j++)
               {--row;
               ptr[row*number + col] = ++Number;}
           }
           temp = !temp;
     }
     
     for( i = number - 1; i >= 0; i--)
     {
          ptr[(number - 1) *  number + i ] = Number++;//因为上面的代码只能成对执行,而偶数的时候,最后一行不能赋值不能执行
     }
     
     for( i = 0; i< number *number; i++)
     {
          if( i % number == 0)printf("\n");
          printf("%02d ", ptr[i] );
     }
     free( ptr );
               
}   

int main( void )
{
    printf("输入你要的数:");
    int n;
    scanf("%d", &n );
    printf("你输入的数是:%d\n", n );
   
    switch( n%2 )
    {
            case 0:
                 {first( n );
                 break;
                 }
            case 1:{
                 second( n );
                  break;
                  }
            default: break;
    }
    getchar();
    return 0;
}我改了点  你在试下  
2010-04-17 23:26
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:2 
#include <stdio.h>

#define L  20

int m[L][L];

int main()
{
    int i, j, x, count=1, f, temp=1;

    printf("intput x:");
    scanf("%d", &x);
   
    i = j = (x-1)/2;//起点
    m[i][j] = 1;
    while(temp<x)
    {
        if(temp%2==1)
        {
            m[i][++j] = ++count;//向东走一步做调整
            for( f=temp; f>0; f-- )//向南走
                m[++i][j] = ++count;
            for( f=temp; f>0; f-- )//向西走
                m[i][--j] = ++count;
        }
        else
        {
            m[i][--j] = ++count;//向西走一步做调整
            for( f=temp; f>0; f--)//向北走
                m[--i][j] = ++count;
            for( f=temp; f>0; f--)//向东走
                m[i][++j] = ++count;
        }
        temp++;
    }
    for( i=0; i<x; i++ )
    {
        for(j=0; j<x; j++)
            printf("%3d",m[i][j]);
        printf("\n");
    }
    printf("\n");
    return 0;
}
2010-04-18 00:20
qq8801103
Rank: 5Rank: 5
来 自:苏州中科大软件学院
等 级:职业侠客
威 望:1
帖 子:422
专家分:340
注 册:2009-10-8
收藏
得分:0 
我用 的 是 tc 这是很老的编译工具了

Discuz!  
好好学习  天天向上
2010-04-19 16:34
快速回复:关于c语言的题目高手进来
数据加载中...
 
   



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

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