• <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)  編輯 收藏 引用

            <2011年1月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345

            導航

            統計

            公告

            統計系統

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            久久九九全国免费| 国产一区二区三精品久久久无广告| 久久综合久久久| 久久国产高清字幕中文| 精品免费久久久久久久| 久久久久无码精品国产不卡| 亚洲AV无码成人网站久久精品大| 久久人做人爽一区二区三区 | 国产精品久久久久久久久| 7777精品久久久大香线蕉| 一本久久a久久精品亚洲| 久久综合九色综合网站| 国产精品久久波多野结衣| 日韩精品久久久久久| 久久涩综合| 亚洲精品乱码久久久久久按摩| 久久午夜羞羞影院免费观看| 精品999久久久久久中文字幕 | 精品久久久久久久久久中文字幕 | 免费久久人人爽人人爽av| 狠狠色丁香久久婷婷综合图片| 久久精品国产亚洲αv忘忧草| 久久久久久毛片免费看| 久久精品无码一区二区app| 久久婷婷五月综合97色直播| 精品久久久久久久久免费影院| 久久久这里只有精品加勒比| 久久精品一本到99热免费| 91精品国产91久久久久久| 久久人人爽人人爽AV片| 亚洲色婷婷综合久久| 2021精品国产综合久久| 欧美久久久久久精选9999| 麻豆成人久久精品二区三区免费| 国产香蕉97碰碰久久人人| 亚洲AV无一区二区三区久久| 国产—久久香蕉国产线看观看 | 精品久久久中文字幕人妻| 国产午夜精品理论片久久影视| 亚洲国产视频久久| 色综合久久久久|