蓝桥杯 2015 C++ A 题解
部分题记录 所有题见链接
链接:https://pan.baidu.com/s/1AOPvttpPoS_KOCrCBLxpzw
提取码:jonc
T5 牌型种数
小明被劫持到X赌城,被迫与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?
请填写该整数,不要填写任何多余的内容或说明文字。
#include <stdio.h> #include<sstream> #include <iostream> using namespace std; int ans =0 ; //k是牌的点数 cnt是目前有多少张牌了 void f(int k , int cnt){ if(k == 14 && cnt==13){ ans ++; return ; } if(k == 14 || cnt >13)return ; for (int i = 0; i < 5; ++i) {//分给的牌数0-4 f( k+1 , cnt +i); } } int main(int argc , const char *argv[]) { f( 1 ,0); //点数从1A开始 cout<<ans<<endl; return 0; }
T7 手链样式
小明有3颗红珊瑚,4颗白珊瑚,5颗黄玛瑙。
他想用它们串成一圈作为手链,送给女朋友。
现在小明想知道:如果考虑手链可以随意转动或翻转,一共可以有多少不同的组合样式呢?
请你提交该整数。不要填写任何多余的内容或说明性的文字。
#include <iostream> #include <stdlib.h> #include <string> #include <algorithm> #include <vector> using namespace std; int main(){ string s = "aaabbbbccccc"; vector<string> v1; int ans=0 ; do{ int i=0; for(;i < v1.size();++i){ if(v1[i].find(s)!=string::npos)break; } if(i!=v1.size())continue; string s2 = s + s ; //考虑旋转 就是往后推移是否重复(顺序不变) v1.push_back(s2); reverse(s2.begin(),s2.end());//考虑翻转 abc -> cba 这样的 v1.push_back(s2); ++ans; }while(next_permutation(s.begin(),s.end())); cout<<ans<<endl; return 0; }
T8 饮料换购
乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去(但不允许暂借或赊账)。
请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能喝到多少瓶饮料。
输入:一个整数n,表示开始购买的饮料数量(0<n<10000)
输出:一个整数,表示实际得到的饮料数
例如:
用户输入:
100
程序应该输出:
149
用户输入:
101
程序应该输出:
151
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型。
#include <stdio.h> #include <iostream> using namespace std ; int chu(int x){ return x/3; } int yu(int x){ return x%3; } int ans = 0; void f(int a){ if(a<3)return; f(yu(a)+chu(chu(a))); ans +=a ; ans+=a/3 ; } int main(){ int a;//初始 int n ; cin >> a ; f(a); cout<<ans<<endl; return 0; }