• 数据连续化处理


    这里先举个简单的例子,很多朋友以前一定写过类似这样的例子:求编写一函数,输入年月日,求出该日是该年的第几天.

    好的,现在大家代码会怎么写呢?我的第一次代码大概是这样的:

       

    int GetDay(int year,int month,int day)
    {
       int s=0;
       switch(month-1)
        {
        case 1:
            s=31; break;
        case 2:
            s=31+28; break;
        case 3:
            s=31+28+31; break;
        case 4:
            s=31+28+31+30; break;
          ...
        }
        //最后在下是否闰年
    }

    今天在fy网站上看了连续化处理后,感悟颇深.对上面的代码做了连续化处理:

    代码
    //返回这天是那一年的第几天
    int GetDay(int year, int month, int day)
    {
        
    int sum=day;
        
    int m[12]={31,28,31,30,31,30,31,31,30,31,30,31};

        
    if(year%400==0 || (year%100 && year%4==0))  //判断闰年
        {
            
    ++m[1]; 
        }

        
    for(int i=0; i<month-1;i++)
        {
            sum 
    += m[i];
        }
        
    return sum;
    }

    怎么样?简浩很多吧.

    这里在举个蛇形矩正输出的例子:

    输入有多组数据,每组只有一行,包含x,y(1 <= x,y <= 30)和t,输出x*y螺旋方阵,如果t=0,就输出逆时针螺旋方阵,否则输出顺时针的

    样例输入:
    3 5 0
    4 4 1

    样例输出(每个数字要占四个格子,输出完一组就接着输出一个空行):
       1  12  11
       2  13  10
       3  14   9
       4  15   8
       5   6   7

       1   2   3   4
      12  13  14   5
      11  16  15   6
      10   9   8   7

    连续化处理后的代码:

    代码
    #define SET_XY(x,y,d) x=sym[d][0], y=sym[d][1]
    int main()
    {
        
    int m, n, t;
        
    int sym[4][2]={{0,-1}, {1,0}, {0,1}, {-1,0}}; //连续化处理的关键
        while(scanf("%d%d%d"&m, &n, &t) != EOF)
        {
            
    int map[32][32= {0}; //初始化数据
            int x, y, dx, dy, d, nStep = 2;
            
    for(x = 1, y = m + 1; x <= n; x++//设置上下边界
                map[x][0= map[x][y] = -1;
            
    for(x = 1, y = n + 1; x <= m; x++//设置左右边界
                map[0][x] = map[y][x] = -1;
            x 
    = y = 1; d = 1 + (t == 0);
            SET_XY(dx, dy, d);
            
    if(map[y+dy][x+dx]) //设置起始方向
            {
                d 
    = (d+1+((t==0)<<1))%4//d就是方向
                SET_XY(dx, dy, d);
            }
            
    for(map[1][1= 1;;nStep++//螺旋遍历
            {
                x 
    += dx , y += dy;
                map[y][x] 
    = nStep;
                
    if(map[y+dy][x+dx]) //碰到边界或者有数的地方
                {
                    d
    = (d+1+((t == 0)<<1))%4//改变方向
                    SET_XY(dx, dy, d);
                    
    if(map[y+dy][x+dx])break//无处可走,退出
                }
            }
            
    for(y = 1; y <= n; y++//输出结果
            {
                
    for(x = 1; x <= m; x++)
                    printf(
    "%4d",map[y][x]);
                printf(
    "\n");
            }
            printf(
    "\n");
        }
        system(
    "pause");
        
    return 0;
    }

    文章来源:http://yzfy.org/dis/listpost.php?tid=629

  • 相关阅读:
    php基本语法学习
    mac下charles使用
    python--logging模块
    CSS样式(二)
    CSS样式(一)
    HTML、CSS基础知识(四)
    HTML、CSS基础知识(三)
    HTML、CSS基础知识(二)
    HTML、CSS基础知识(一)
    python学习(三十四)第一个框架
  • 原文地址:https://www.cnblogs.com/tqlin/p/1717877.html
Copyright © 2020-2023  润新知