zoukankan      html  css  js  c++  java
  • 河南省之6 遥控器

      1 #include<stdio.h>
      2 
      3 int a[4][4];
      4 typedef struct 
      5 {
      6     int x;
      7     int y;
      8 }node;
      9 node s[10];
     10 
     11 void cs()//用来存放数字的结构体,x,y分别是他们的行列坐标
     12 {
     13     s[0].x=3;s[0].y=1;
     14     s[1].x=0;s[1].y=0;
     15     s[2].x=0;s[2].y=1;
     16     s[3].x=0;s[3].y=2;
     17     s[4].x=1;s[4].y=0;
     18     s[5].x=1;s[5].y=1;
     19     s[6].x=1;s[6].y=2;
     20     s[7].x=2;s[7].y=0;
     21     s[8].x=2;s[8].y=1;
     22     s[9].x=2;s[9].y=2;
     23 }
     24     
     25 int fun(int m,int n)//判断m到n的最短方式
     26 {
     27     int i,j,u,v,f,X,Y;
     28     u=v=f=100;        //初始化,保证最后判断是否可以调到
     29     if(n==m) return 0;//如果相等就不用调
     30     if(n<10 &&a[s[n].x][s[n].y]) //如果小于10并且这个数字存在就直接返回1
     31         return 1;
     32     if(n>9&&a[3][0])//如果大于10,别且两个数的行列坐标都在,可以3步完成,记录下f=3;
     33     {
     34         X=n/10;Y=n%10;
     35         if(a[s[X].x][s[X].y]&&a[s[Y].x][s[Y].y])
     36             f=3;
     37     }
     38     if(a[0][3])//如果向上调节的键存在
     39     {
     40         u=(n-m+100)%100;    //u初始化为直接向上调的数
     41         for(i=n,j=0;j<u-1;i--,j++)//一位数时情况
     42         {
     43             if(i<0) i=99;
     44             if(i<10&&a[s[i].x][s[i].y])
     45             {
     46                 u=j+1;break;
     47             }
     48         }
     49         if(a[3][0])//两位数时情况
     50             for(i=n,j=0;j<u-3;i--,j++)
     51             {
     52                 if(i<0) i=99;
     53                 if(i>9)
     54                 {
     55                     X=i/10;Y=i%10;
     56                     if(a[s[X].x][s[X].y]&&a[s[Y].x][s[Y].y])
     57                     {
     58                         u=u<j+3?u:j+3;break;
     59                     }
     60                 }
     61             }
     62     }
     63     if(a[1][3])
     64     {
     65         v=(m-n+100)%100;
     66         for(i=m,j=0;j<v-1;i++,j++)
     67         {
     68             if(i>99) i=0;
     69             if(i<10&&a[s[i].x][s[i].y])
     70             {
     71                 v=j+1;break;
     72             }
     73         }
     74         if(a[3][0])
     75             for(i=n,j=0;j<v-3;i++,j++)
     76             {
     77                 if(i>99) i=0;
     78                 if(i>9)
     79                 {
     80                     X=i/10;Y=i%10;
     81                     if(a[s[X].x][s[X].y]&&a[s[Y].x][s[Y].y])
     82                     {
     83                         v=v<j+3?v:j+3;
     84                         break;
     85                     }
     86                 }
     87             }
     88     }
     89     f=f<u?f:u;
     90     return f<v?f:v;//最后返回最小值
     91 }
     92 
     93 int main()
     94 {
     95     int t,i,j,n,m,p;
     96     cs();
     97     scanf("%d",&t);
     98     while(t--)
     99     {
    100         for(i=0;i<4;i++)
    101             for(j=0;j<4;j++)
    102             {
    103                 if(i==2&&j==3||i==3&&j>1)
    104                     continue;
    105                 scanf("%d",&a[i][j]);
    106             }
    107             scanf("%d%d",&m,&n);
    108             p=fun(m,n);
    109             if(p==100)
    110                 printf("-1\n");
    111             else
    112                 printf("%d\n",p);
    113     }
    114     return 0;
    115 }
    116 
    117     
  • 相关阅读:
    VS2010中ActiveX控件"未能实例化activex控件 因为这需要设计时授权"解决办法
    CreateThread,_beginthread与AfxbeginThread之间的区别
    C的定时器timeSetEvent使用
    GetCurrentTime(),GetLocalTime(),GetSystemTime()之间的区别
    使用PostThreadMessage在Win32线程间传递消息
    c++配置文件.ini,GetPrivateProfileString( )WritePrivateProfileString( )
    Callback函数详解
    Dispose,using
    mysql 存储过程,表
    函数,视图,存储过程,触发器,sysobjects (系统对象表),事务,异常
  • 原文地址:https://www.cnblogs.com/xiaofanke/p/3002076.html
Copyright © 2011-2022 走看看