免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: bluemy
打印 上一主题 下一主题

一道安捷伦笔试题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-11-22 20:02 |只看该作者
原帖由 hqx8211 于 2006-11-22 17:18 发表
不用那么复杂。观察一下规律就可以发现(假定N=5,其它值一样分析法):
赋值转弯的次数分别为"4, 4, 4, 3, 3, 2, 2, 1, 1",如果N = 10, 则为"9, 9, 9, 8, 8, .....3, 2, 2, 1, 1"

程 ...

这个思路很好,学习一下

论坛徽章:
0
12 [报告]
发表于 2006-11-22 20:11 |只看该作者
偶也来凑热闹.

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

#define N 11
#define RIGHT 1
#define DOWN  2
#define LEFT  3
#define UP    4

int matrix[N][N];

void print_matrix(){  //print matrix
    int i,j;
    for(i=0;i<N;i++){
       for(j=1;j<=N;j++){
          printf("%3d ",matrix[i][j-1]);
          if(j%N==0) printf("\n");
       }
    }
}

int main(){
    int row,col;
    int i;
    int way=RIGHT;  //direction: 1, right  2, down  3, left  4, up
   
    //set array elements to 0
    for(row=0;row<N;row++)
        for(col=0;col<N;col++)
         atrix[row][col]=0;
   
    //let's begin.
    row=col=0;
    for(i=1;i<=N*N;i++){
                matrix[row][col]=i;
                if(i==N*N) break;

                while(1){
                        if(way==RIGHT){ //right
                                if(col+1<N && matrix[row][col+1]==0){
                                        col++;
                                        break;
                                }else{
                                        way=DOWN;
                                }
                        }

                        if(way=DOWN){ //down
                                if(row+1<N && matrix[row+1][col]==0){
                                        row++;
                                        break;
                                }else{
                                        way=LEFT;
                                }
                        }

                        if(way=LEFT){ //left
                                if(col>0 && matrix[row][col-1]==0){
                                        col--;
                                        break;
                                }else{
                                        way=UP;
                                }
                        }

                        if(way=UP){ //up
                                if(row>0 && matrix[row-1][col]==0){
                                        row--;
                                        break;
                                }else{
                                        way=RIGHT;
                                }
                        }
                }
    }

    print_matrix();
    exit(0);
}

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
13 [报告]
发表于 2006-11-22 22:07 |只看该作者

1986年海淀区中学生计算机竞赛题目

这个也是1986年海淀区中学生计算机竞赛题目(上机)
当时要求BASIC语言

当时这个题目要求15分钟内完成

论坛徽章:
0
14 [报告]
发表于 2006-11-23 03:46 |只看该作者
原帖由 safedead 于 2006-11-22 22:07 发表
这个也是1986年海淀区中学生计算机竞赛题目(上机)
当时要求BASIC语言

当时这个题目要求15分钟内完成


小学6年级时用BASIC写过.

论坛徽章:
0
15 [报告]
发表于 2006-11-23 10:12 |只看该作者
#include <stdio.h>

int matrix[100][100];

void getMatrix(int limit);
int checkPoint(int x, int y, int limit);

int main(int argc, char *argv[])
{
        int limit=atoi(argv[1]);
        if(limit>100){
                printf("the limit is too large, under 100 please");
                return 0;
        }
        int i, j;
        for(i=0;i<100;i++){
                for(j=0;j<100;j++){
                        matrix[i][j]=0;
                }
        }
        getMatrix(limit);
        for(i=0;i<limit;i++){
                for(j=0;j<limit;j++){
                        printf("%4d",matrix[i][j]);
                }
                printf("\n");
        }
        printf("\n");
        return 0;

}

void getMatrix(int limit)
{
        int step[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
        int count=1, pointCount=limit*limit, type=0;
        int curX=0, curY=0;
        matrix[curX][curY]=count++;
        while(count<=pointCount){
                if(checkPoint(curX+step[type][0], curY+step[type][1], limit)){
                        curX+=step[type][0];
                        curY+=step[type][1];
                }else{
                        type=(type+1)%4;
                        curX+=step[type][0];
                        curY+=step[type][1];
                }
                matrix[curX][curY]=count++;
        }
}

int checkPoint(int x, int y, int limit)
{
        return (x>=0 && x<limit && y>=0 && y<limit && matrix[x][y]<=0)?1:0;
}

论坛徽章:
0
16 [报告]
发表于 2006-11-23 11:34 |只看该作者
你们都是牛人,我94年前没见过计算机什么样子,95之前没写过一行代码。

论坛徽章:
0
17 [报告]
发表于 2006-11-23 12:48 |只看该作者
原帖由 namtso 于 2006-11-23 11:34 发表
你们都是牛人,我94年前没见过计算机什么样子,95之前没写过一行代码。

你不会是94年出生的吧,好年轻啊,这么年轻就上CU来了,天才。

论坛徽章:
0
18 [报告]
发表于 2006-11-23 14:51 |只看该作者
我也写一个:


  1. #include <stdio.h>

  2. #define M 6

  3. int a[M][M];

  4. void make_num(int n);
  5. void print_num();

  6. void make_num(int n)
  7. {
  8.     int     i = 0,j = 0,m = 1,k = 0,l = 0;
  9.     int     Max,N;
  10.    
  11.     N = n;
  12.     Max = N*N;
  13.    
  14.     while(m <= Max){
  15.         for( i = k;i < N; i++ ){
  16.             if( m > Max )   break;
  17.             a[k][i] = m++;
  18.         }
  19.         l = k+1;
  20.         for( i = l;i < N; i++ ){
  21.             if( m > Max)    break;
  22.             a[i][N-1] = m++;
  23.         }
  24.         for( j = N-2;j >= k;j-- ){
  25.             if( m > Max)    break;
  26.             a[N-1][j] = m++;
  27.         }
  28.         for( i = N-2;i > k;i-- ){
  29.             if( m > Max )   break;
  30.             a[i][k] = m++;
  31.         }
  32.         k++;
  33.         N--;
  34.     }
  35. }

  36. void print_num()
  37. {
  38.     int     i,j;
  39.    
  40.     for( i = 0;i < M;i++ ){
  41.         for( j = 0;j < M;j++)
  42.             printf("%4d",a[i][j]);
  43.         printf("\n");
  44.     }
  45. }

  46. int main(void)
  47. {
  48.     make_num(M);
  49.     print_num();
  50.    
  51.     return 0;
  52. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP