2016年第七届蓝桥杯C/C++程序设计本科B组决赛

2.答案300

刁丝卫代码,比赛时long long写成int,结果成了263。。。一等擦肩而过。。。

#include <iostream>
#include <fstream>
#include <cstring>
#define LL long long
using namespace std;
bool mark[100];
LL res[100],sum=0;
bool tmpmark[10];
bool judge(LL x){
  memset(tmpmark,0,sizeof(tmpmark));
  if(x==0){
    if(mark[0] == 1)
        return false;
    return true;
  }
  while(x!=0){
    if(mark[x%10] || tmpmark[x%10])
        return false;
    tmpmark[x%10] = 1;
    x/=10;
  }
  return true;
}

int update(LL x,int coun){
  if(x==0){
    mark[x] = 1;
    coun++;
    return coun;
  }
  while(x!=0){
    mark[x%10] = 1;
    x/=10;
    coun++;
  }
  return coun;
}

void reupdate(LL x){
  if(x==0){
    mark[x] = 0;
    return ;
  }
  while(x!=0){
    mark[x%10] = 0;
    x/=10;
  }
}

void dfs(int coun,int rescoun,LL last){
  if(coun == 10){
    for(int i=0;i<rescoun;i++)
        cout<<res[i]<<‘ ‘;
    cout<<">>>"<<sum<<endl;
    sum++;
    return ;
  }
  for(LL i=last;i<100000;i++){
    if(judge(i*i)){
        int tmpcoun = update(i*i,coun);
        res[rescoun] = i*i;
        dfs(tmpcoun,rescoun+1,i+1);
        reupdate(i*i);
    }
  }
}
int main (){
    memset(mark,0,sizeof(0));
    dfs(0,0,0);
    cout<<sum;
    return 0;
}

时间: 2024-08-28 09:26:22

2016年第七届蓝桥杯C/C++程序设计本科B组决赛的相关文章

2015年第六届蓝桥杯C/C++程序设计本科B组决赛 ——居民集会(编程大题)

标题:居民集会 蓝桥村的居民都生活在一条公路的边上,公路的长度为L,每户家庭的 位置都用这户家庭到公路的起点的距离来计算,第i户家庭距起点的距 离为di.每年,蓝桥村都要举行一次集会.今年,由于村里的人口太多,村委 会决定要在4个地方举行集会,其中3个位于公路中间,1个位最公路 的终点. 已知每户家庭都会向着远离公路起点的方向去参加集会,参加集会的 路程开销为家庭内的人数ti与距离的乘积. 给定每户家庭的位置di和人数ti,请为村委会寻找最好的集会举办地 :p1, p2, p3, p4 (p1<

2012年第三届蓝桥杯C/C++程序设计本科B组决赛

1.星期几[结果填空] (满分5分)    1949年的国庆节(10月1日)是星期六.     今年(2012)的国庆节是星期一.    那么,从建国到现在,有几次国庆节正好是星期日呢? 只要答案,不限手段!    可以用windows日历,windows计算器,Excel公式,.....    当然,也可以编程!    不要求写出具体是哪些年,只要一个数目!    千万不要提交源代码!    答案不要写在这里,写在“解答.txt”中 答案:9 s.主要是取余的使用 #include<iostr

第七届蓝桥杯省赛C/C++B组赛题及答案

第一题 [题目] 煤球数目 有一堆煤球,堆成三角棱锥形.具体:第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),....如果一共有100层,共有多少个煤球? 请填表示煤球总数目的数字.注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字. [提示] 找出每一层煤球个数的规律,循环累加计算 [答案] 1 #include<stdio.h> 2 int main() 3 { 4 int i,s=1,num=1; 5 for(i=2;i&

2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告

2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告 勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580. 条件应为abs(a[3]-a[7])!=1,宝宝心理苦啊.!感谢zzh童鞋的提醒. 勘误2:第7题在推断连通的时候条件写错了,后两个if条件中是应该是<=12 落了一个等于号.正确答案应为116. 1.煤球数目 有一堆煤球.堆成三角棱锥形.详细: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形). -. 假设一共

第七届蓝桥杯C语言C组-(自己懂的题目)

第七届蓝桥杯C语言C组-(自己懂的题目) 表示刚刚查了成绩,省赛一等奖,有资格去北京了,然后写一下总结, 先来写一下我懂的题目,毕竟我也是菜鸟,听说国赛比预赛难几个等级... 第一题 报纸页数 X星球日报和我们地球的城市早报是一样的, 都是一些单独的纸张叠在一起而已.每张纸印有4版. 比如,某张报纸包含的4页是:5,6,11,12, 可以确定它应该是最上边的第2张报纸. 我们在太空中捡到了一张X星球的报纸,4个页码分别是: 1125,1126,1727,1728 请你计算这份报纸一共多少页(也就

第七届蓝桥杯省赛7:剪邮票

第七届蓝桥杯省赛7:剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是合格的剪取. 请你计算,一共有多少种不同的剪取方法. 请填写表示方案数目的整数. 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字. 解决思路:先将所有五个一组的情况遍历,然后用广度优先判断是否连通. 我在选五个一组的时候是用的 for 先选出第几个邮票,然后将其

算法笔记_212:第七届蓝桥杯软件类决赛真题(Java语言B组)

目录 1 愤怒小鸟 2 反幻方 3 打靶 4 路径之谜 5 碱基 6 圆圈舞 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 愤怒小鸟 愤怒小鸟 X星球愤怒的小鸟喜欢撞火车! 一根平直的铁轨上两火车间相距 1000 米 两火车 (不妨称A和B) 以时速 10米/秒 相对行驶. 愤怒的小鸟从A车出发,时速50米/秒,撞向B车, 然后返回去撞A车,再返回去撞B车,如此往复.... 两火车在相距1米处停车. 问:这期间愤怒的小鸟撞 B 车多少次? 注意:需要提交的是一个整数(表示撞B车的次数),不要

算法笔记_213:第七届蓝桥杯软件类决赛部分真题(Java语言C组)

目录 1 平方末尾 2 七星填数 3 打印数字 4 赢球票 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 平方末尾 平方末尾 能够表示为某个整数的平方的数字称为"平方数" 比如,25,64 虽然无法立即说出某个数是平方数,但经常可以断定某个数不是平方数. 因为平方数的末位只可能是:[0, 1, 4, 5, 6, 9] 这6个数字中的某个. 所以,4325435332必然不是平方数. 如果给你一个2位或2位以上的数字,你能根据末位的两位来断定它不是平方数吗? 请计算一下,一个2位以上

第七届蓝桥杯C语言B组题目总结

这个算式中A~I代表1~9的数字,不同的字母代表不同的数字. (ps:式子是:a+b/c+m/n=10,其中,a,b,c都是一位数,m,n都是三位数.总共10个数字,并且这些数是1~9.不能重复) 比如: 6+8/3+952/714 就是一种解法, 5+3/1+972/486 是另一种解法. 这个算式一共有多少种解法? 注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字. 解题思路:暴力枚举.a,b,c从1~9中一次选取,保证两两不相同即可.利用数组take[10],来记录已取数字.m