部分题记录 所有题见链接
链接: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;
}