1.年龄巧合
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小明和他的表弟一起去看电影,有人问他们的年龄。小明说:今年是我们的幸运年啊。我出生年份的四位数字加起来刚好是我的年龄。表弟的也是如此。已知今年是 20142014 年,并且,小明说的年龄指的是周岁。
请推断并填写出小明的出生年份。
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
解析:
本题其实就是让你求2014年减去n年后,那一年的年份各个数字之和等于n,所以直接上代码
#include <iostream>
using namespace std;
int main()
{
for(int i=1900;i<=2014;i++){
for(int j=i+1;j<=2014;j++){
int a=2014-i;
int b=2014-j;
int c=i;
int d=j;
int sum1=0,sum2=0;
while(c){
sum1+=c%10;
c=c/10;
}
while(d){
sum2+=d%10;
d=d/10;
}
if(a==sum1&&b==sum2){
cout<<i;
return 0;
}
}
}
return 0;
}
2.纸牌三角形
将每个数进行全排列来组成边,这里我们使用C++ STL库中的 next_permutation来进行全排列,
关于next_permutation的用法这里简单说明下,
一般使用的格式为
int a[];
do
{}
while(next_permutation(a,a+n));
大概就是do里面放判断的条件,符合条件就ans++;next_permutation()是按照字典序产生排列的,并且是从数组中当前的字典序开始依次增大直至到最大字典序,且该函数的返回值为bool,排序不了时会返回false
因为题目说考虑旋转和镜像后相同的算一种,旋转的情况有3种,镜像的情况有2种,所以最后的答案还需要除以2*3=6。
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a[9]={1,2,3,4,5,6,7,8,9};
int count=0;
do
{
int sum1=a[0]+a[1]+a[2]+a[3];
int sum2=a[0]+a[4]+a[5]+a[6];
int sum3=a[3]+a[6]+a[7]+a[8];
if(sum1==sum2 && sum1==sum3)
{
count++;
}
}while(next_permutation(a,a+9));
cout<<count/6;
return 0;
}