• <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 閱讀(409) 評論(0)  編輯 收藏 引用

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

            導航

            統計

            公告

            統計系統

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            久久精品水蜜桃av综合天堂 | 一级a性色生活片久久无少妇一级婬片免费放 | 久久91这里精品国产2020| 精品国产91久久久久久久a| 热RE99久久精品国产66热| 久久国内免费视频| 久久久老熟女一区二区三区| 91亚洲国产成人久久精品| 久久精品国产黑森林| 99精品国产综合久久久久五月天| 97精品依人久久久大香线蕉97 | 久久香蕉国产线看观看乱码| 久久精品成人一区二区三区| 久久国产色AV免费看| 久久综合亚洲色HEZYO国产| 久久久久亚洲AV片无码下载蜜桃| 精品久久国产一区二区三区香蕉| 久久精品国产免费观看| 久久精品夜色噜噜亚洲A∨| 国产成人久久激情91| 国产精品久久久久久久久久影院| 国内精品久久久久影院免费| 国产成人精品三上悠亚久久| 国产精品久久久久久久午夜片 | 久久国产精品国产自线拍免费| 欧美亚洲国产精品久久久久| 国产精品成人无码久久久久久 | 久久国产精品波多野结衣AV | 一97日本道伊人久久综合影院| 久久久久久综合一区中文字幕| 久久亚洲中文字幕精品有坂深雪 | 99999久久久久久亚洲| 狠狠综合久久AV一区二区三区| 久久影院午夜理论片无码| 天天综合久久久网| 久久综合丝袜日本网| 久久本道伊人久久| 久久香蕉一级毛片| 精品久久久久久无码人妻热| 久久精品无码一区二区app| 精品多毛少妇人妻AV免费久久|