蓝桥杯 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;
}

  

原文地址:https://www.cnblogs.com/Stephen-Jixing/p/12627592.html