1.饮料换购
2.牌型种类
3.煤球数目
4.生日蜡烛
5.凑算式
6.纸牌三角形
1.饮料换购
饮料厂举办一次促销优惠活动,乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去(但不允许暂借或赊账)。请你计算一下,如果小明不浪费瓶盖,尽可能地参加活动,那么,对于他初始买入的n瓶饮料最后他一共能喝到多少瓶饮料?
输入:一个整数n,表示开始购买的饮料数量(0<n<10000)
输出:一个整数,表示实际得到的饮料数
解题思路
每三个瓶盖换一瓶,则增加一个瓶盖
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;cin>>n;
int sum=n; //sum饮料
int m=n; //m瓶盖
while(m>=3)
{
m-=3;
m+=1;
sum+=1;
}
cout<<sum;
}
2.牌型种类
小明被劫持到X赌城,被迫与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序
自己手里能拿到的初始牌型组合一共有多少种呢?
解题思路
只考虑点数有13个点数(1.2.3-j.q.k),则有13个for循环,
每人13张,则加起来为13,满足+1
#include<bitsdc++.h>
using namespace std;
int main()
{
int a[13];
int sum=0;
for(a[0]=0;a[0]<=4;a[0]++)
for(a[1]=0;a[1]<=4;a[1]++)
for(a[2]=0;a[2]<=4;a[2]++)
for(a[3]=0;a[3]<=4;a[3]++)
for(a[4]=0;a[4]<=4;a[4]++)
for(a[5]=0;a[5]<=4;a[5]++)
for(a[6]=0;a[6]<=4;a[6]++)
for(a[7]=0;a[7]<=4;a[7]++)
for(a[8]=0;a[8]<=4;a[8]++)
for(a[9]=0;a[9]<=4;a[9]++)
for(a[10]=0;a[10]<=4;a[10]++)
for(a[11]=0;a[11]<=4;a[11]++)
for(a[12]=0;a[12]<=4;a[12]++)
{
if(a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7]+a[8]+a[9]+a[10]+a[11]+a[12]==13)
{
sum++;
}
}
cout<<sum<<endl;
}
3.煤球数目
有一堆煤球,堆成三角棱锥体。具体:
第一层放1个,第二层3个,第三层6个,第四层10个,…如果一共有100层,共有多少个煤球?
解题思路
规律题,每次增加的量+1,第二层比第一层多2,第三层比第二层多3…
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[100],t=2,sum=1;
a[0]=1;
for(int i=1;i<100;i++)
{
a[i]=a[i-1]+t;
sum+=a[i];
t++;
}
cout<<sum<<endl;
}
4.生日蜡烛
某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?
解题思路
模拟枚举,假设从i岁(1-30)开始过生日,满足吹熄的蜡烛正好236根则满足输出i岁
#include<bits/stdc++.h>
using namespace std;
int main()
{
for(int i=1;i<=30;i++)
{
int sum=0;
for(int j=i;j<=100;j++)
{
sum+=j;
if(sum==236)
{
cout<<i<<endl;
break;
}
}
}
}
5.凑算式
这个算式中A-I代表1-9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
解题思路
直接暴力枚举9for,通分满足ACGHI+BGHI+CDEF=10CGHI则+1
#include<bits/stdc++.h>
using namespace std;
int main()
{
int sum=0;
for(int a=1;a<=9;a++)
for(int b=1;b<=9;b++)
for(int c=1;c<=9;c++)
for(int d=1;d<=9;d++)
for(int e=1;e<=9;e++)
for(int f=1;f<=9;f++)
for(int g=1;g<=9;g++)
for(int h=1;h<=9;h++)
for(int i=1;i<=9;i++)
{
if(a!=b&&a!=c&&a!=d&&a!=e&&a!=f&&a!=g&&a!=h&&a!=i&&
b!=c&&b!=d&&b!=e&&b!=f&&b!=g&&b!=h&&b!=i&&
c!=d&&c!=e&&c!=f&&c!=g&&c!=h&&c!=i&&
d!=e&&d!=f&&d!=g&&d!=h&&d!=i&&
e!=f&&e!=g&&e!=h&&e!=i&&
f!=g&&f!=h&&f!=i&&
g!=h&&g!=i&&
h!=i)
{
int t1=a*c*(100*g+10*h+i);
int t2=b*(100*g+10*h+i);
int t3=c*(100*d+10*e+f);
int t4=10*c*(100*g+10*h+i);
if(t1+t2+t3==t4) sum++;
}
}
cout<<sum<<endl;
}
6.纸牌三角形
解题思路
继续暴力枚举,设
a
b c
d e
f g h i,范围1-9,且各不相等,且各边相加相等,考虑旋转和镜像后的算同一种,共有6种(旋转/3镜像/2),得到结果/6
#include<bitsdc++.h>
using namespace std;
int main()
{
int sum=0;
for(int a=1;a<=9;a++)
for(int b=1;b<=9;b++)
for(int c=1;c<=9;c++)
for(int d=1;d<=9;d++)
for(int e=1;e<=9;e++)
for(int f=1;f<=9;f++)
for(int g=1;g<=9;g++)
for(int h=1;h<=9;h++)
for(int i=1;i<=9;i++)
{
if(a!=b&&a!=c&&a!=d&&a!=e&&a!=f&&a!=g&&a!=h&&a!=i&&
b!=c&&b!=d&&b!=e&&b!=f&&b!=g&&b!=h&&b!=i&&
c!=d&&c!=e&&c!=f&&c!=g&&c!=h&&c!=i&&
d!=e&&d!=f&&d!=g&&d!=h&&d!=i&&
e!=f&&e!=g&&e!=h&&e!=i&&
f!=g&&f!=h&&f!=i&&
g!=h&&g!=i&&
h!=i)
{
int x1=a+b+d+f;
int x2=a+c+e+i;
int x3=f+g+h+i;
if(x1==x2&&x2==x3) sum++;
}
}
cout<<sum/6<<endl;
}