蓝桥杯 C++项目题库2

2.2.6 奖券数目
有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。虽然这
些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是 5 位
数(10000-99999),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果
任何两张奖券不重号,最多可发出奖券多少张。
请提交该数字(一个整数),不要写任何多余的内容或说明性文字。
int main() {
int ans = 0;
for (int i = 10000; i <= 99999; i++) {
int num = i;
第 36 页 共 256 页
int a = num % 10; num=num/10;
int b = num % 10; num=num/10;
int c = num % 10; num=num/10;
int d = num % 10; num=num/10;
int e = num % 10;
if(a==4||b==4||c==4||d==4||e==4)
{ }
else
ans++;
}
cout <<ans;
return 0; }
2.2.7 纪念日
2020 年 7 月 1 日是中国共产党成立 99 周年纪念日。
中国共产党成立于 1921 年 7 月 23 日。
请问从 1921 年 7 月 23 日中午 12 时到 2020 年 7 月 1 日中午 12 时一共包含多少分
钟?
#include<iostream>
using namespace std;
int days(int n) {
if(n%400==0||n%4==0&&n%100!=0)
return 366;
else
return 365;
}
int main() {
int sum=0;
for(int i=1922; i<=2020; i++)
{sum=sum+days(i);
}
sum=sum-22;
cout<<sum*60*24;
return 0; }
#include<iostream>
using namespace std;
int main()
第 37 页 共 256 页
{
long long i,sum=0,k=0;
for(i=1921;i<=2020;i++)
{
if((i%4==0&&i%100!=0 ) || i%400==0 )
k++;
}
sum=(2020-1921+1)*365+k-22;
cout<<sum*24*60;
}
2.2.8 生日蜡烛
某君从某年开始每年都举办一次生日 party,并且每次都要吹熄与年龄相同根数的
蜡烛。现在算起来,他一共吹熄了 236 根蜡烛。请问,他从多少岁开始过生日 party
的?
答案:26 33
#include<stdio.h>
int main()
{
int start,end;
for(start = 1 ; start < 100 ; start ++)
{
for( end = start ; end <100 ; end ++ )
{
int sum = 0;
for(int i = start; i <= end; i ++)
sum += i;
if( sum == 236)
{
printf("start : %d end : %d\n",start,end);
}
}
}
return 0;
}
#include<iostream>
第 38 页 共 256 页
using namespace std;
int main(){
int i,j,n=0;
for(i=1;i<100;i++){
for(j=i;j<100;j++)
{
n=(i+j)*(j-i+1)/2;
if( n==236 )
{ cout<<i<<" "<<j; break; }
n=0;
}
}
return 0;
}
第 39 页 共 256 页
2.3 ****第十一届蓝桥杯青少组 C++选拔赛中级组
2.3.1 参赛组别推荐
2121 年 8 月,为了让选手们获得更好的参赛体验,蓝桥杯大赛青少年创意编程
C++组细分为初级组和高级组,小蓝第一次报名参 C++组的比赛,不知道自己该选择
哪一组参赛,你能给他一些建认吗?蓝桥杯规定 8 到 12 岁的选手可以参加初级组:
13 到 18 岁的选手可以参加高级组的此赛:如果小于 8 岁,告诉他:“他还太小”:如
果大于 18 岁,告诉他:“他太大了”。
输入:一个整数 n(1<n<100),代表小蓝的年龄。
输出:
请给出参赛建议:
小于 8 岁,输出信息为:"You are too young!" 8 到 12 岁,输出信息为:"Welcome to Junior Class!" 13 到 18 岁,输出信息为:"Welcome to Senior Class!" 19 岁及以上,输出信息为:"You are too old!" 样例輸入:
9
样例输出:
Welcome to Junior Class!
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
if(n<8) cout<<"You are too young!";
else if(n<=12) cout<<"Welcome to Junior Class!";
else if(n<=18) cout<<"Welcome to Senior Class!";
else cout<<"You are too old!";
return 0;
}
2.3.2 还差几天到 2022 年?
时光飞逝,转眼间就到了 2022 年的最后一个月。小蓝也在期盼着 2023 年的到来,
那意味着小蓝又长大了一岁。你能帮小蓝计算一下还有几天就到 2023 年了吗?
输入:
两个整数 month,day 表示 2022 年的某月某日(0<month<13,0<day<32)
第 40 页 共 256 页
输出:
一个整数,表示距离 2023 年的天数。
样例输入:
12 31
样例输出:
1
#include <iostream>
using namespace std;
int main()
{
int month,day,sum=0;
cin>>month>>day;
switch(month)
{
case 1:sum+=31;
case 2:sum+=28;
case 3:sum+=31;
case 4:sum+=30;
case 5:sum+=31;
case 6:sum+=30;
case 7:sum+=31;
case 8:sum+=31;
case 9:sum+=30;
case 10:sum+=31;
case 11:sum+=30;
case 12:sum+=31;
}
sum-=day;
sum++;
cout<<sum;
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main()
第 41 页 共 256 页
{
int month,day,c[13]={0,31,28,31,30,31,30,31,31,30,31,30,31},sum=0;
cin>>month>>day;
for(int i=12;i>=month-1 ;i--) 10 6 30 31 31-6+1
sum+=c[i];
cout<<sum+c[i]-day+1;
return 0;
}
2.3.3 大写字母 Y
自从小蓝学会编程之后,他酷爱用编程的方式写字。你能帮助他写出字母"Y"吗?
输入:整数 n(1(n<50)。
输出:输出高度为 2n-1 行的大写字母"Y"。
提示:第一行第一颗左侧无多余空格,每行最后一颗*后无多余空格。
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int t;
for(int rr=1;rr<=n;rr++)
{
t=2*n-1-(rr-1);
for(int cc= 1;cc<=rr-1;cc++)
{
cout<<" ";
}
第 42 页 共 256 页
for(int cc= rr ; cc<=t; cc++)
{
if(cc==rr || cc== t )
cout<<"*";
else
cout<<" ";
}
cout<<endl;
}
for(int rr= n+1;rr<=(2*n-1);rr++)
{
for(int cc=1;cc<=n;cc++)
{
if(cc==n)
cout<<"*";
else
cout<<" ";
}
cout<<endl;
}
return 0;}
2.3.4 “计算 24" “计算 24"是一个流传已久的数字游戏,小蓝最近对此痴迷不已。
游戏规则是:对 4 个 1-10 之间的自然数,进行加、减、乘三种运算,要求运算結果
等于 24。乘法的优先级高于加、减,并且算式中不可以用括号,不可以改变 4 个数字
出现的顺序。
下面我们给出两个游戏的具体例子:
若给出的 4 个操作数是:10、2、4、8,则有两种可能的解答方案:
10+2+4+8=24,10*2-4+8=24,输出内容:2
若给出的 4 个操作數是:7、2、3.6,则没有解答案,输出内容:0。
输入:四个整数。
输出:输出方案总数
样例输入 1:
7 2 3 6
样例输出 1:
第 43 页 共 256 页
0
样例输入 2:
10 2 4 8
样例输出 2:
2
方法一:暴力枚举所有的可能性
#include <iostream>
using namespace std;
int a,b,c,d,f1,f2,f3,tmp;
int main( )
{
int tj=0;
cin>>a>>b>>c>>d;
for(f1=1;f1<=3;f1++)
for(f2=1;f2<=3;f2++)
for(f3=1;f3<=3;f3++){
if(f1==3&&f2==3&&f3==3) tmp=a*b*c*d;
else if(f1==3&&f2==3&&f3!=3){
tmp=a*b*c;
if(f3==1)tmp+=d;
else tmp-=d;
}
else if(f1!=3&&f2==3&&f3==3){
tmp=b*c*d;
if(f1==1)tmp=a+tmp;
else tmp=a-tmp;
}
else if(f1==3&&f2!=3&&f3==3){
if(f2==1)tmp=a*b+c*d;
else tmp=a*b-c*d;
}
else if(f1==3&&f2!=3&&f3!=3){
tmp=a*b;
if(f2==1)tmp+=c;
else tmp-=c;
if(f3==1)tmp+=d;
第 44 页 共 256 页
else tmp-=d;
}
else if(f1!=3&&f2==3&&f3!=3){
tmp=b*c;
if(f1==1)tmp=a+tmp;
else tmp=a-tmp;
if(f3==1)tmp+=d;
else tmp-=d;
}
else if(f1!=3&&f2!=3&&f3==3){
if(f1==1)tmp=a+b;
else tmp=a-b;
if(f2==1)tmp+=c*d;
else tmp-=c*d;
}
else{
if(f1==1)tmp=a+b;
else tmp=a-b;
if(f2==1)tmp+=c;
else tmp-=c;
if(f3==1)tmp+=d;
else tmp-=d;
}
if(tmp==24)tj++;
}
cout<<tj;
return 0;
}
方法二:递归 数组
#include<bits/stdc++.h>
using namespace std;
bool search(double a[],int x) {
if(x==1&&fabs(a[1]-24)<=1e-6) return 1; //题目要求除法运算为实数;
double b[6];
memset(b,0,sizeof(b));
第 45 页 共 256 页
for(int i=1; i<x; ++i)
for(int j=i+1; j<=x; ++j) {
int p=1;
for(int k=1; k<=x; ++k)
if(k!=i&&k!=j) b[p++]=a[k];
b[p]=a[i]+a[j];
if(search(b,x-1))return 1;//分别递归,依次穷举;
b[p]=a[i]*a[j];
if(search(b,x-1))return 1;
b[p]=a[i]-a[j];
if(search(b,x-1))return 1;
b[p]=a[j]-a[i];
if(search(b,x-1))return 1;
if(a[j]!=0) {
b[p]=a[i]/a[j];
if(search(b,x-1))return 1;
}
if(a[i]!=0) {
b[p]=a[j]/a[i];
if(search(b,x-1))return 1;
}
}
return 0;
}
int main() {
while(1) {
double a[6];
memset(a,0,sizeof(a));
int sum=0;
for(int i=1; i<=4; ++i) {
cin>>a[i];
sum+=a[i];
}
if(sum==0) break;
if(search(a,4)) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
第 46 页 共 256 页
}
return 0;
}
2.3.5 超级素数
在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的数,被称为素数,又叫
质数。超级素数是指一个素数,每去掉最后一位上一个数字,总能保证剩下的数依然
为素数。比如"373"就是一个超级素数,去掉个位的"3"后,"37"依然是素数:继续去
掉"37"个位的"7"后,"3"还是素数。
输入:输人一个整数 n(10<=n<=10^8)
输出:输出所有小于等于 n 的超级素数的个数
样例输入 1:
30
样例输出 1:
6
样例输出 1 提示:2 3 5 7 23 29
样例输入 2:
50
样例输出 2:
8
样例输出 2 提示:2 3 5 7 23 29 31 37
算法思想
暴力枚举(70 分)
可以通过线性筛素数法将所有不超过 n 的素数求出,
然后枚举每个素数,判断是否符合超级素数的性质。
分析超级素数的性质,会发现最高位只能由素数 2 、 3 、 5 、 7 组成,
其余各位只能从是奇数 1 、 3 、 7 、 9 中选择,
因此可以使用 DFS 构造所有满足性质的超级素数。
*/
#include <iostream>
#include <cmath>
using namespace std;
int ans,n;
int a[]={2,3,5,7};//最高位
int b[]={1,3,7,9};//其他位
bool check(int x){//判断素数
if(x==1)return false;
第 47 页 共 256 页
for(int i=2;i<=sqrt(x);i++)
if(x%i==0) return false;
return true;
}
void dfs(int x){//深搜
if(x>n)return;
ans++;
for(int i=0;i<4;i++)
if(check(x*10+b[i]))
dfs(x*10+b[i]);
}
int main( ){
cin>>n;
for(int i=0;i<4;i++)
dfs(a[i]);
cout<<ans<<endl;
return 0;
}

  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据给定的问题描述和代码,这是一个关于蓝桥杯C++题目中的n皇后问题。题目要求在一个n*n的棋盘上放置n个黑皇后和n个白皇后,使得任意两个黑皇后和任意两个白皇后都不在同一行、同一列或同一条对角线上。代码使用递归和回溯的方法来解决这个问题。 代码中的pd1函数用于判断黑皇后的位置是否合法,pd2函数用于判断白皇后的位置是否合法。fang1函数用于放置黑皇后,fang2函数用于放置白皇后。最后,通过调用fang1函数来计算总共有多少种放法。 需要注意的是,代码中使用的p1和p2数组分别表示黑皇后和白皇后的位置,qi数组表示棋盘上每个位置是否可以放皇后。 因此,根据给定的代码,可以计算出总共有多少种放法。 #### 引用[.reference_title] - *1* [蓝桥杯 基础练习 2n皇后问题C/C++(可作DFS练习)](https://blog.csdn.net/qq_43838669/article/details/129306490)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [蓝桥杯2n皇后问题](https://blog.csdn.net/qq_59611494/article/details/128682794)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值