• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            第二屆“頂嵌杯”全國嵌入式系統C語言編程大賽 決賽題目報告

            閑的無聊,做這種比賽練練手。。當時也沒注冊比賽帳號,純屬打醬油= =
            第一題,速算24
            給定4個不大于10的正整數(范圍1-10),要求在不改變數據先后順序的情況下,采用加減乘除四種運算,找到一個表達式,使得最后的結果是24。
            題目沒說清楚,對于括號問題,每一步運算都要+括號。
            當時我實現的方法很搓。。應該就是枚舉每次進行的操作數位置i,將第i個操作數與第i+1個操作數作運算。然后更新操作數數組。將第i個操作數替換為i op i+1的結果,然后將第i+1以后的操作數前移1位。
            具體看代碼吧。。

              1# include <stdio.h>
              2# include <math.h>
              3# include <string.h>
              4# define zero(num) (fabs(num)<1e-6)
              5int d[4];
              6void print(int o,int t,int a,int b,int c)
              7{
              8     int pos[4]={0,2,4,6},i,j;
              9     int op[2],opf[2];
             10     op[0]=o;
             11     op[1]=t;
             12     opf[0]=a;
             13     opf[1]=b;
             14     char ans[100];
             15     for(i=0;i<4;i++) ans[pos[i]]=d[i]+48;
             16     for(i=1;i<=5;i+=2) ans[i]=' ';
             17     ans[7]='\0';
             18     for(j=0;j<=1;j++)
             19     {
             20       for(i=strlen(ans)+1;i>pos[op[j]];i--) ans[i]=ans[i-1];
             21       ans[pos[op[j]]]='(';
             22       for(i=op[j];i<4-j;i++) pos[i]++;
             23       for(i=strlen(ans)+1;i>pos[op[j]+1]+1;i--) ans[i]=ans[i-1];
             24       ans[pos[op[j]+1]+1]=')';
             25       for(i=op[j]+2;i<4-j;i++) pos[i]++;
             26       for(i=pos[op[j]];ans[i]!=' ';i++);
             27       switch(opf[j])
             28       {
             29         case 1:ans[i]='+';break;
             30         case 2:ans[i]='-';break;
             31         case 3:ans[i]='*';break;
             32         case 4:ans[i]='/';break;
             33       }
            ;
             34       for(i=op[j];i<3-j;i++) pos[i]=pos[i+1];
             35     }

             36     for(i=pos[0];ans[i]!=' ';i++);
             37     switch(c)
             38       {
             39         case 1:ans[i]='+';break;
             40         case 2:ans[i]='-';break;
             41         case 3:ans[i]='*';break;
             42         case 4:ans[i]='/';break;
             43       }
            ;
             44    printf("%s\n",ans);
             45}

             46int main()
             47{
             48   
             49   double t[5],t1[5];
             50   int i,j,k,l,tmp;
             51   for(i=0;i<4;i++)
             52     scanf("%d",d+i);
             53   for(i=0;i<3;i++)
             54   {
             55      for(j=0;j<2;j++)
             56       {
             57          for(k=1;k<=4;k++)
             58          {
             59             if(k==4&&d[i+1]==0break;
             60             for(tmp=0;tmp<i;tmp++) t[tmp]=d[tmp];
             61             switch(k)
             62             {
             63               case 1:t[i]=d[i]+d[i+1];break;
             64               case 2:t[i]=d[i]-d[i+1];break;
             65               case 3:t[i]=d[i]*d[i+1];break;
             66               case 4:t[i]=d[i]/(double)d[i+1];break;
             67             }
            ;
             68             for(tmp=i+2;tmp<4;tmp++) t[tmp-1]=d[tmp];
             69             for(l=1;l<=4;l++)
             70             {
             71               if(l==4&&zero(t[j+1])) goto end;
             72               for(tmp=0;tmp<j;tmp++) t1[tmp]=t[tmp];
             73               switch(l)
             74                 {
             75                   case 1:t1[j]=t[j]+t[j+1];break;
             76                   case 2:t1[j]=t[j]-t[j+1];break;
             77                   case 3:t1[j]=t[j]*t[j+1];break;
             78                   case 4:t1[j]=t[j]/(double)t[j+1];break;
             79                 }
            ;
             80               for(tmp=j+2;tmp<3;tmp++) t1[tmp-1]=t[tmp];
             81               for(tmp=1;tmp<=4;tmp++)
             82                 switch(tmp)
             83                 {
             84                   case 1:
             85                        if(zero(t1[0]+t1[1]-24))
             86                        {
             87                          print(i,j,k,l,tmp);
             88                          goto success;
             89                        }

             90                        break;
             91                   case 2:
             92                        if(zero(t1[0]-t1[1]-24))
             93                        {
             94                          print(i,j,k,l,tmp);
             95                          goto success;
             96                        }

             97                        break;
             98                   case 3:
             99                        if(zero(t1[0]*t1[1]-24))
            100                        {
            101                          print(i,j,k,l,tmp);
            102                          goto success;
            103                        }

            104                        break;
            105                   case 4:
            106                        if(!zero(t1[1])&&zero(t1[0]/t1[1]-24))
            107                        {
            108                          print(i,j,k,l,tmp);
            109                          goto success;
            110                        }

            111                        break;
            112                 }
            ;
            113             }

            114          }

            115          end:;
            116       }

            117   }

            118   success:
            119   return 0;
            120   
            121}

            122

            第二題:迷宮問題,經典BFS,不解釋。。直接代碼了。。
             1#include<stdio.h>
             2int map[5][5];
             3int q[100][2],s=-1,e=-1;
             4int pre[5][5][2];
             5# define legal(a,b) ((a)>=0&&(a)<5&&(b)>=0&&(b)<5&&map[(a)][(b)]==-1)
             6void print(int r,int c)
             7{
             8   if(r==0&&c==0)
             9     printf("(%d, %d)\n",r,c);
            10   else
            11   {
            12    print(pre[r][c][0],pre[r][c][1]);
            13    printf("(%d, %d)\n",r,c);
            14   }

            15}

            16int main()
            17{
            18    int i,j;
            19    for(i=0;i<5;i++)
            20      for(j=0;j<5;j++)
            21      {
            22        scanf("%d",&map[i][j]);
            23        if(map[i][j]==1) map[i][j]=-2;
            24        else map[i][j]=-1;
            25      }

            26    q[++e][0]=0;
            27    q[e][1]=0;
            28    map[0][0]=0;
            29    while(s!=e)
            30    {
            31        int r=q[++s][0],c=q[s][1];
            32        if(legal(r+1,c))
            33        {
            34          q[++e][0]=r+1;
            35          q[e][1]=c;
            36          map[q[e][0]][q[e][1]]=map[r][c]+1;
            37          pre[q[e][0]][q[e][1]][0]=r;
            38          pre[q[e][0]][q[e][1]][1]=c;
            39        }

            40        if(legal(r-1,c))
            41        {
            42          q[++e][0]=r-1;
            43          q[e][1]=c;
            44          map[q[e][0]][q[e][1]]=map[r][c]+1;
            45          pre[q[e][0]][q[e][1]][0]=r;
            46          pre[q[e][0]][q[e][1]][1]=c;
            47        }

            48        if(legal(r,c+1))
            49        {
            50          q[++e][0]=r;
            51          q[e][1]=c+1;
            52          map[q[e][0]][q[e][1]]=map[r][c]+1;
            53          pre[q[e][0]][q[e][1]][0]=r;
            54          pre[q[e][0]][q[e][1]][1]=c;
            55        }

            56        if(legal(r,c-1))
            57        {
            58          q[++e][0]=r;
            59          q[e][1]=c-1;
            60          map[q[e][0]][q[e][1]]=map[r][c]+1;
            61          pre[q[e][0]][q[e][1]][0]=r;
            62          pre[q[e][0]][q[e][1]][1]=c;
            63        }

            64    }

            65    print(4,4);
            66    return 0;
            67        
            68}

            69

            posted on 2010-12-04 19:54 yzhw 閱讀(405) 評論(0)  編輯 收藏 引用

            <2010年12月>
            2829301234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            導航

            統計

            公告

            統計系統

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            国内精品久久久久影院亚洲| 久久国产高潮流白浆免费观看| 久久精品国产男包| 99久久做夜夜爱天天做精品| 久久久精品久久久久特色影视| 精品综合久久久久久97超人 | 久久夜色精品国产www| 久久精品人人做人人爽97 | 成人妇女免费播放久久久| 日韩精品久久无码人妻中文字幕| 国产精品乱码久久久久久软件| 亚洲国产精品一区二区三区久久| 婷婷久久综合九色综合九七| 亚洲精品无码久久久久AV麻豆| 亚洲Av无码国产情品久久| 中文字幕无码久久久| 午夜不卡久久精品无码免费| 蜜臀av性久久久久蜜臀aⅴ麻豆 | 久久国产免费观看精品| 国产国产成人精品久久| 青青青伊人色综合久久| 精品无码久久久久久国产| 日韩美女18网站久久精品| 色婷婷久久综合中文久久蜜桃av| 国产高潮国产高潮久久久| 一级做a爰片久久毛片人呢| 久久久久久亚洲精品无码| 久久久久久久精品成人热色戒| 久久综合久久自在自线精品自| 久久久久久免费一区二区三区| 精品免费久久久久国产一区| 香蕉久久永久视频| 久久久一本精品99久久精品88| 国产成人精品久久亚洲高清不卡 | 欧美亚洲另类久久综合婷婷| 久久综合狠狠综合久久综合88 | 韩国三级大全久久网站| 久久精品人妻一区二区三区| 亚洲AV无码一区东京热久久| 国产综合成人久久大片91| 久久无码人妻一区二区三区|