当前位置:   article > 正文

C++的搜索题目(1)_输入描述第一行是两个整数n和m(n和m都是4~100之间的整数),代表接下来的二维数组有

输入描述第一行是两个整数n和m(n和m都是4~100之间的整数),代表接下来的二维数组有

问题A 奇特的分组:

题目描述

现有N个整数和一个整数M,小C想到一种有趣的组合方法,他想把连续的相加不大于M的整数分成一组,然后输出每一组的起始和终止编号,如果每组整数数量不同,在满足题意下保证分组尽可能少,若有多种分法,则保证并前面的小组整数个数少,后面的小组整数个数多。 

例如:1 3 4 6 2 5 7 七个整数, 

给定M=8,则输出为: 

1 - 3 

4 - 4 

5 - 6 

7 - 7

输入

第一行,两个整数n和m,n表示一共有n个整数,m表示给定的每组最大值。 n,m≤1000 

第二行,n个整数。 每个整数大小不超过m

输出

数行,每行一个范围。

样例输入
  1. 7 8
  2. 1 3 4 6 2 5 7
样例输出
  1. 1 - 3
  2. 4 - 4
  3. 5 - 6
  4. 7 - 7
提示

数据保证不存在0-0的情况。

解题
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int n,m,a[10001];
  4. void f(int n){
  5. int sum=0;
  6. for(int i=n;i>=1;i--){
  7. if(sum+a[i]<=m){
  8. sum+=a[i];
  9. if(i==1){
  10. cout<<1<<" - "<<n<<endl;
  11. return ;
  12. }
  13. }
  14. else{
  15. f(i);
  16. cout<<i+1<<" - "<<n<<endl;
  17. return ;
  18. }
  19. }
  20. }
  21. int main(){
  22. cin>>n>>m;
  23. for(int i=1;i<=n;i++){
  24. cin>>a[i];
  25. }
  26. f(n);
  27. return 0;
  28. }

 问题B 汉诺塔问题:

题目描述

汉诺塔由三根柱子(分别用A、B、C表示)和n个大小互不相同的空心盘子组成。一开始n个盘子都摞在柱子A上,大的在下面,小的在上面,形成了一个塔状的锥形体。 

 对汉诺塔的一次合法的操作是指:从一根柱子的最上层拿一个盘子放到另一根柱子的最上层,同时要保证被移动的盘子一定放在比它更大的盘子上面(如果移动到空柱子上就不需要满足这个要求)。我们可以用两个字母来描述一次操作:第一个字母代表起始柱子,第二个字母代表目标柱子。例如,A-->B就是把柱子A最上面的那个盘子移到柱子B。汉诺塔的游戏目标是将所有的盘子从柱子A移动到柱子B或柱子C上面。 

 现在已知A柱子上有N个盘子,要把所有N个盘子移动到C柱子上,请输出每一次操作的具体步骤(N≤30) 

如两个盘子的情况:

A-->B 

A-->C 

B-->C

输入

一个数n,表示有n个圆盘。

输出

若干行表示具体操作过程

样例输入
2
样例输出
  1. A-->B
  2. A-->C
  3. B-->C
解题 
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. void hanoi(int n,char a,char b,char c){
  4. if(n==1){
  5. cout<<a<<"-->"<<c<<endl;
  6. return ;
  7. }
  8. hanoi(n-1,a,c,b);
  9. cout<<a<<"-->"<<c<<endl;
  10. hanoi(n-1,b,a,c);
  11. return ;
  12. }
  13. int main(){
  14. int n;
  15. cin>>n;
  16. hanoi(n, 'A','B','C');
  17. return 0;
  18. }

问题C 水坑的数量:

题目描述

由于近期的降雨,雨水汇集在农民小F的田地不同的地方。

我们用一个 N×M(1≤N≤100,1≤M≤100) 的网格图表示。每个网格中有水( ) 或是旱地( )。

一个网格与其周围的八个网格相连,而一组相连的网格视为一个水坑。

小F想弄清楚他的田地已经形成了多少水坑。给出小F田地的示意图,确定当中有多少水坑。

输入

输入第 1 行:两个空格隔开的整数:N 和 M。 

第 2 行到第 N+1 行:每行 M 个字符,每个字符是 W 或 .,它们表示网格图中的一排。字符之间没有空格。 

输出

输出一行,表示水坑的数量。

样例输入
  1. 10 12
  2. W........WW.
  3. .WWW.....WWW
  4. ....WW...WW.
  5. .........WW.
  6. .........W..
  7. ..W......W..
  8. .W.W.....WW.
  9. W.W.W.....W.
  10. .W.W......W.
  11. ..W.......W.
样例输出
3
解题
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. char a[1001][1001];
  4. void find(int x,int y){
  5. a[x][y]='m';
  6. if(a[x+1][y]=='W') find(x+1,y);
  7. if(a[x-1][y]=='W') find(x-1,y);
  8. if(a[x][y+1]=='W') find(x,y+1);
  9. if(a[x][y-1]=='W') find(x,y-1);
  10. if(a[x+1][y+1]=='W') find(x+1,y+1);
  11. if(a[x-1][y-1]=='W') find(x-1,y-1);
  12. if(a[x-1][y+1]=='W') find(x-1,y+1);
  13. if(a[x+1][y-1]=='W') find(x+1,y-1);
  14. return;
  15. }
  16. int main(){
  17. int n,m,ans=0;
  18. cin>>n>>m;
  19. for(int i=1;i<=n;i++){
  20. for(int j=1;j<=m;j++){
  21. cin>>a[i][j];
  22. }
  23. }
  24. for(int i=1;i<=n;i++){
  25. for(int j=1;j<=m;j++){
  26. if(a[i][j]=='W'){
  27. find(i,j);
  28. ans++;
  29. }
  30. }
  31. }
  32. cout<<ans;
  33. return 0;
  34. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/998629
推荐阅读
相关标签
  

闽ICP备14008679号