zoukankan      html  css  js  c++  java
  • 2014年第五届蓝桥杯B组(C/C++)预赛题目及个人答案(欢迎指正)

    参考:https://blog.csdn.net/qq_30076791/article/details/50573512

    第3题:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int ans=0;
     4 void dfs(int di,int hu,int num)
     5 {
     6     if (di==0&&hu==1&&num==1)//要注意审题!酒要喝光
     7     {
     8         ans++;
     9         return;
    10     }
    11     if (di)//如果有店可遇到
    12     {
    13         dfs(di-1,hu,num*2);
    14     }
    15     if (hu&&num>0)//如果还有花可遇到且手上有酒
    16     {
    17         dfs(di,hu-1,num-1);
    18     }
    19 }
    20 int main()
    21 {
    22     dfs(5,10,2);
    23     cout<<ans;
    24 
    25     return 0;
    26 }

    第4题:注意判断的正确书写

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int a[15];
     4 void show()
     5 {
     6     for (int i=1;i<=12;i++)
     7     {
     8         printf("[%d]",a[i]);
     9     }
    10     printf("
    
    ");
    11 }
    12 int test()
    13 {
    14     int t=a[1]+a[3]+a[6]+a[8];
    15     if (t==a[1]+a[4]+a[7]+a[11]&&t==a[2]+a[3]+a[4]+a[5]&&t==a[2]+a[6]+a[9]+a[12]&&t==a[8]+a[9]+a[10]+a[11]&&t==a[5]+a[7]+a[10]+a[12])
    16     {//注意if里面要用多个&&来比较,不可用多个==来比较!!
    17         return 1;
    18     }
    19     return 0;
    20 }
    21 int main()
    22 {
    23     for (int i=1;i<=12;i++)
    24     {
    25         a[i]=i;
    26     }
    27     do
    28     {
    29 //        show();
    30         if (test())
    31         {
    32             printf("%d
    ",a[6]);
    33             break;
    34         }
    35     }while (next_permutation(a+1,a+13));
    36 
    37     return 0;
    38 }
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int a[15];
     4 int vis[15];
     5 void look()
     6 {
     7     for (int i=1;i<=12;i++)
     8     {
     9         printf("[%d]",a[i]);
    10     }
    11     printf("
    
    ");
    12 }
    13 int test()
    14 {
    15     int t=a[1]+a[3]+a[6]+a[8];
    16     if (t==a[1]+a[4]+a[7]+a[11]&&t==a[2]+a[3]+a[4]+a[5]&&t==a[2]+a[6]+a[9]+a[12]&&t==a[8]+a[9]+a[10]+a[11]&&t==a[5]+a[7]+a[10]+a[12])
    17     {//注意if里面要用多个&&来比较,不可用多个==来比较!!
    18         return 1;
    19     }
    20     return 0;
    21 }
    22 void dfs(int id,int remain)
    23 {
    24     if (remain==0)
    25     {
    26 //        look();
    27         if (test())
    28             printf("%d
    ",a[6]);
    29         return;
    30     }
    31     for (int i=1;i<=12;i++)
    32     {
    33         if (vis[i]==0)
    34         {
    35             a[id]=i;
    36             vis[i]=1;
    37             dfs(id+1,remain-1);
    38             vis[i]=0;
    39         }
    40     }
    41 }
    42 int main()
    43 {
    44     a[1]=1;
    45     a[2]=8;
    46     a[12]=3;
    47     vis[1]=vis[8]=vis[3]=1;
    48     dfs(3,9);
    49 
    50     return 0;
    51 }

     第九题:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int N=1e9+7;
     4 int tu[55][55];
     5 int n,m,k,ans=0;
     6 void test()
     7 {
     8     for (int i=1;i<=n;i++)
     9     {
    10         for (int j=1;j<=m;j++)
    11         {
    12             printf("[%d]",tu[i][j]);
    13         }
    14         printf("
    ");
    15     }
    16 }
    17 void read()
    18 {
    19     for (int i=1;i<=n;i++)
    20     {
    21         for (int j=1;j<=m;j++)
    22         {
    23             cin>>tu[i][j];
    24         }
    25     }
    26 }
    27 void dfs(int x,int y,int have,int most)
    28 {
    29     if (have>k)
    30         return;
    31     if (x==n&&y==m)//注意跳出条件!
    32     {
    33         if (have==k||have==k-1&&most<tu[x][y])
    34         {
    35             ans++;
    36             ans=ans%N;
    37         }
    38     }
    39     if (x+1<=n)
    40     {
    41         if (tu[x][y]>most)
    42         {
    43             swap(tu[x][y],most);
    44             dfs(x+1,y,have+1,most);
    45             swap(tu[x][y],most);
    46             dfs(x+1,y,have,most);
    47         }
    48         else
    49             dfs(x+1,y,have,most);
    50     }
    51     if (y+1<=m)
    52     {
    53         if (tu[x][y]>most)
    54         {
    55             swap(tu[x][y],most);
    56             dfs(x,y+1,have+1,most);
    57             swap(tu[x][y],most);
    58             dfs(x,y+1,have,most);
    59         }
    60         else
    61             dfs(x,y+1,have,most);
    62     }
    63 }
    64 int main()
    65 {
    66 //    freopen("in.txt","r",stdin);
    67     cin>>n>>m>>k;
    68     read();
    69     dfs(1,1,0,-1);
    70     cout<<ans;
    71 
    72     return 0;
    73 }
  • 相关阅读:
    grep用法小结
    观察者模式
    类之间的关系
    Linux——makefile编写
    探索C++多态和实现机理
    进程间通信——管道
    C++继承引入的隐藏与重写
    Linux 文件读写操作与磁盘挂载
    xShell终端下中文乱码问题
    深入理解C++ new/delete, new []/delete[]动态内存管理
  • 原文地址:https://www.cnblogs.com/hemeiwolong/p/10575028.html
Copyright © 2011-2022 走看看