一步之遥

从昏迷中醒来,小明发现自己被关在X星球的废矿车里。
矿车停在平直的废弃的轨道上。
他的面前是两个按钮,分别写着“F”和“B”。

小明突然记起来,这两个按钮可以控制矿车在轨道上前进和后退。
按F,会前进97米。按B会后退127米。
透过昏暗的灯光,小明看到自己前方1米远正好有个监控探头。
他必须设法使得矿车正好停在摄像头的下方,才有机会争取同伴的援助。
或许,通过多次操作F和B可以办到。

矿车上的动力已经不太足,黄色的警示灯在默默闪烁...
每次进行 F 或 B 操作都会消耗一定的能量。
小明飞快地计算,至少要多少次操作,才能把矿车准确地停在前方1米远的地方。

请填写为了达成目标,最少需要操作的次数。

注意,需要提交的是一个整数,不要填写任何无关内容(比如:解释说明等)

答案是97

我是算的,eee 就是假设是97x-127y = 1

那么就一定有  97(y+z) - 127y = 1 ------->

-30y+97z = 1  这样子就很好算出来 z =  13    y = 42      42+55 = 97

凑平方数

把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够办到的。
比如:0, 36, 5948721

再比如:
1098524736
1, 25, 6390784
0, 4, 289, 15376
等等...

注意,0可以作为独立的数字,但不能作为多位数字的开始。
分组时,必须用完所有的数字,不能重复,不能遗漏。

如果不计较小组内数据的先后顺序,请问有多少种不同的分组方案?

注意:需要提交的是一个整数,不要填写多余内容。

此代码有误 我的答案是295不知道要怎么改

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[10],sq[700],now = 0;
ll vis[700],d[10],yy = 0,ans[700];
set<string>st;
string gg[700];
void init()
{sq[++now] = 0;for(ll i = 1;i<=99999;i++){ll jj = i*i;ll kk = jj;memset(a,0,sizeof(a));while(jj !=0){a[jj%10]++;jj= jj / 10;}ll j ;for(j = 0;j<10;j++){if(a[j] > 1)break;}if(j==10) sq[++now] = kk;}gg[1] = "0";ans[1] = 1;for(ll i = 2;i<=now;i++){ll kk = sq[i];while(kk!=0){gg[i]+=(kk%10+'0');kk = kk / 10;}reverse(gg[i].begin(),gg[i].end());ans[i] = gg[i].length();}
}
void DFS(ll k,ll len,ll cnt)
{if(len>=10){if(len==10){d[++cnt] = k;sort(d+1,d+1+cnt);//从小到大排序string s="";for(int i =1;i<=cnt;i++)s+=gg[d[i]];int a[10] = {0};for(int i =0;i<10;i++){a[s.at(i)-'0']++;}int flag = 0;for(int i =0;i<=9;i++){if(a[i]!=1){flag = 1;break; }} if(flag==0) {st.insert(s);cout<<s<<endl;}}return ;}else{d[++cnt] = k;for(ll i = k;i<=now;i++){if(10-len < ans[i])break;if(vis[i] == 0){vis[i] = 1;DFS(i,len+ans[i],cnt);vis[i] = 0;}}    }return ;
}
int main()
{init();freopen("C:\\Users\\DELL\\Desktop\\a.txt","w",stdout);for(ll i = 1;i<=now;i++){printf("%lld %lld  %lld  ",i,sq[i],ans[i]);cout<<gg[i]<<endl;   }for(ll i = 1;i <= now;i++){memset(vis,0,sizeof(vis));vis[i] = 1;DFS(i,ans[i],0);}    cout<<st.size()<<endl;return 0;
}

来自网上正确的代码:

#include<bits/stdc++.h>
using namespace std;
using namespace std;
long long shu[20];
int ai[10]={0,1,2,3,4,5,6,7,8,9};
set<string> jj;
void dfs(int cur,int num)
{if(cur==10){long long shu2[20];for(int i=0;i<num;i++)shu2[i]=shu[i];sort(shu2,shu2+num);string xu;for(int i=0;i<num;i++){while(shu2[i]){int a=shu2[i]%10;shu2[i]=shu2[i]/10;char b=a+'0';xu=xu+b;}xu+='-'; }jj.insert(xu);return ;}if(ai[cur]==0){shu[num]=0;dfs(cur+1,num+1);} else{long long sum=0;for(int i=cur;i<10;i++){sum=sum*10+ai[i];double son=sqrt(sum);if(son==(int)son){shu[num]=sum;dfs(i+1,num+1);}}}
}int main()
{   do{memset(shu,0,sizeof(shu));dfs(0,0);}while(next_permutation(ai,ai+10));cout<<jj.size()<<endl;return 0;
}

棋子换位

有n个棋子A,n个棋子B,在棋盘上排成一行。
它们中间隔着一个空位,用“.”表示,比如:

AAA.BBB

现在需要所有的A棋子和B棋子交换位置。
移动棋子的规则是:
1. A棋子只能往右边移动,B棋子只能往左边移动。
2. 每个棋子可以移动到相邻的空位。
3. 每个棋子可以跳过相异的一个棋子落入空位(A跳过B或者B跳过A)。

AAA.BBB 可以走法:
移动A ==> AA.ABBB
移动B ==> AAAB.BB

跳走的例子:
AA.ABBB ==> AABA.BB

以下的程序完成了AB换位的功能,请仔细阅读分析源码,填写划线部分缺失的内容。

#include <stdio.h>
#include <string.h>

void move(char* data, int from, int to)
{
    data[to] = data[from];
    data[from] = '.';
}

int valid(char* data, int k)
{
    if(k<0 || k>=strlen(data)) return 0;
    return 1;
}
    
void f(char* data)
{
    int i;
    int tag;
    int dd = 0; // 移动方向
    
    while(1){
        tag = 0;
        for(i=0; i<strlen(data); i++){
            if(data[i]=='.') continue;
            if(data[i]=='A') dd = 1;
            if(data[i]=='B') dd = -1;
            
            if(valid(data, i+dd) && valid(data,i+dd+dd)
            && data[i+dd]!=data[i] && data[i+dd+dd]=='.'){
            //如果能跳...
                move(data, i, i+dd+dd);
                printf("%s\n", data);
                tag = 1;
                break;
            }
        }
        
        if(tag) continue;
        
        for(i=0; i<strlen(data); i++){
            if(data[i]=='.') continue;
            if(data[i]=='A') dd = 1;
            if(data[i]=='B') dd = -1;            
                
            if(valid(data, i+dd) && data[i+dd]=='.'){
            // 如果能移动...
                if( ______________________ ) continue;  //填空位置
                move(data, i, i+dd);
                printf("%s\n", data);
                tag = 1;
                break;
            }
        }
        
        if(tag==0) break;                    
    }
}
    
int main()
{
    char data[] = "AAA.BBB";    
    f(data);
    return 0;
}

注意:只提交划线部分缺少的代码,不要复制已有代码或填写任何多余内容。

valid(data, i-dd) && data[i-dd]!=data[i]&&i+dd!=data.length-1&&data[i+dd+dd]==data[i-dd]  

意思是 当没有可以跳的  该棋子可移动之前 判断它旁边字母是否与他相同 若相同则移动 若不同 则说明这是刚刚跳过来的 在判断“ . ”后面可还有字母 若有判断与该棋子旁边的旗子是否相同 若相同则说明不该这一旗子移动 continue 过去。

机器人塔

X星球的机器人表演拉拉队有两种服装,A和B。
他们这次表演的是搭机器人塔。

类似:

A
BB
ABA
AABB
BBBAB
ABABBA

队内的组塔规则是:
 
  A 只能站在 AA 或 BB 的肩上。
  B 只能站在 AB 或 BA 的肩上。

你的任务是帮助拉拉队计算一下,在给定A与B的人数时,可以组成多少种花样的塔。

输入一行两个整数 M 和 N,空格分开(0<M,N<500),分别表示A、B的人数,保证人数合理性。

要求输出一个整数,表示可以产生的花样种数。

例如:
用户输入:
1 2

程序应该输出:
3

再例如:
用户输入:
3 3

程序应该输出:
4

资源约定:
峰值内存消耗 < 256M
CPU消耗  < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。

我自己的代码应该会超时吧?我也不知道不过是对的

#include<bits/stdc++.h>
using namespace std;
int book[50][50];
struct node
{int x,y;
}s[1000];
int n,m,cnt = 1;
bool check(int a,int b)//表示的是a的个数,b表示的是b的个数仅此而已
{for(int i = cnt;i>=2;i--){if(a>n||b>m)return false;for(int j =1;j<=i-1;j++){if(book[i][j] == book[i][j+1]) book[i-1][j]=1,a++;else book[i-1][j] = 2,b++;}}if(a==n&&b==m) return true;return false;
}
int main()
{scanf("%d%d",&n,&m);while(cnt*(cnt+1)/2 != (n+m))cnt++;int now = 0;int gg = min(n,cnt);for(int i = 0;i<=gg;i++){int kk = cnt - i;if(m<kk)continue;if(book[i][kk]==1)continue;book[i][kk] = 1;s[++now].x = i;s[now].y = kk;}gg = min(m,cnt);for(int i = 0;i<=gg;i++){int kk = cnt - i;//这个表示的是A if(n<kk)continue;if(book[kk][i]==1)continue;book[kk][i] = 1;s[++now].x = kk;//这个表示的是A s[now].y = i;//这个表示的是B  }// 1表示A 2表示B  int ans = 0;memset(book,0,sizeof(book));for(int i = 1;i <= now;i++){for(int j = 1;j<=s[i].x;j++)book[cnt][j] = 1;for(int j = s[i].x+1; j<=cnt;j++)book[cnt][j] = 2;do{if(check(s[i].x,s[i].y))ans++;} while(next_permutation(book[cnt]+1,book[cnt]+cnt+1));}cout<<ans<<endl;
/*底层全排列 cnt 表示这个可以是多少个 那么全排列就可以从 A从0~~~~n   B也可以从0~~m为了避免重复可以用map稍微弄下 ok就是这个这样子或者是50*50的数组
*/ return 0;
}

2016年第七届(C/C++)B组蓝桥国赛题相关推荐

  1. 小唐开始刷蓝桥(五)2016年第七届C/C++ B组蓝桥杯省赛真题

    文章目录 前言 一.煤球数目 二.生日蜡烛 三.凑算式 四.快速排序 五.抽签 六.方格填数 七.剪邮票 八.四平方和 九.交换瓶子 十.最大比例 上一篇: 小唐开始刷蓝桥(四)2017年第八届C/C ...

  2. 2016年第七届C/C++ B组蓝桥杯省赛真题

    这里是蓝桥杯历年的题目专栏,将会陆续更新将往年真题以及解答发布出来,欢迎各位小伙伴关注我吖,你们的点赞关注就是给我最好的动力!!! 每天更新一届真题解析,敬请期待. 蓝桥杯历年真题及详细解答 目录 第 ...

  3. 征战蓝桥 —— 2016年第七届 —— C/C++A组第8题——四平方和

    题目 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0^2 + 1^2 + 2^2 ...

  4. 征战蓝桥 —— 2016年第七届 —— C/C++A组第10题——最大比例

    题目 X星球的某个大奖赛设了M级奖励.每个级别的奖金是一个正整数. 并且,相邻的两个级别间的比例是个固定值. 也就是说:所有级别的奖金数构成了一个等比数列.比如: 16,24,36,54 其等比值为: ...

  5. 征战蓝桥 —— 2016年第七届 —— C/C++A组第3题——方格填数

    题目 如下的10个格子 (如果显示有问题,也可以参看[图7-1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻. (左右.上下.对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案 ...

  6. 征战蓝桥 —— 2016年第七届 —— C/C++A组第7题——剪邮票

    剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是 ...

  7. 征战蓝桥 —— 2016年第七届 —— C/C++A组第5题——消除尾一

    题目 下面的代码把一个整数的二进制表示的最右边的连续的1全部变成0 如果最后一位是0,则原数字保持不变. 如果采用代码中的测试数据,应该输出: 0000000000000000000000000110 ...

  8. 征战蓝桥 —— 2016年第七届 —— C/C++A组第2题——生日蜡烛

    题目 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛. 现在算起来,他一共吹熄了236根蜡烛. 请问,他从多少岁开始过生日party的? 请填写他开始过生日party ...

  9. 征战蓝桥 —— 2016年第七届 —— C/C++A组第4题——快速排序

    题目 排序在各种场合经常被用到. 快速排序是十分常用的高效率的算法. 其思想是:先选一个"标尺", 用它把整个队列过一遍筛子, 以保证:其左边的元素都不大于它,其右边的元素都不小于 ...

  10. 小唐开始刷蓝桥(六)2015年第六届C/C++ B组蓝桥杯省赛真题

    文章目录 前言 一.奖券数目 二.星系炸弹 三.三羊献瑞 四.格子中输出 五.九数组分数 六.加法变乘法 七.牌型种数 八.移动距离 九.垒骰子 十.生命之树 上一篇: 小唐开始刷蓝桥(五)2016年 ...

最新文章

  1. LintCode 249. 统计前面比自己小的数的个数
  2. linux c 编译时 include 和 链接库 文件路径指定
  3. CentOS/用FTP客户端软件连接到服务器
  4. 三种集中式总线判优控制
  5. launch mysql_Mac Pro 开机自启动 PHP-FPM,Nginx,MySql 等软件
  6. 线性代数知识点总结_2020考研数学线性代数强化复习重点知识点总结
  7. fp-tree算法matlab实现,现代设计优化算法MATLAB实现
  8. Android中的Intent和Intent-filter总结
  9. c语言循环结成绩统计,学生成绩统计C语言实现
  10. 2020-11-09
  11. gazebo 直接获取传感器数据_5个使传感器更简单的技巧
  12. 通过appium-desktop定位元素
  13. 如何通过SCJP考试(含真题分析和考点)
  14. 自定义Google搜索引擎
  15. 全球与中国量身定制生产线市场深度研究分析报告
  16. loadrunner12录制事件一直卡在11就不动了,大佬们,求助啊!!!
  17. 从 0 到 1 学习 elasticsearch ,这一篇就够了!(建议收藏)
  18. git ls-files:项目文件码数行数统计
  19. Window server 2008 R2 无法安装tools 解决办法
  20. ping命令指定包大小

热门文章

  1. 个利用正则表达式解析单句SQL的类SqlParser
  2. 用Sql Server 2000的数据库备份来还原Sql Server 2005中的数据库
  3. android socket_Android 10.0系统启动之Zygote进程(四)-「Android取经之路」
  4. 那些花儿,从零构建Vue工程(webpack4 Eslint git hooks...)
  5. 机器学习重塑供应链管理的10个途径
  6. IE8的模式修改优化Windows7
  7. DevExpress控件TExtLookupComboBox实现多列模糊匹配输入的方法
  8. 在图层上使用CATransform3D制做三维动画-b
  9. 国内网络安全风险评估市场与技术操作
  10. 关于JSP表单的一些技巧和经验