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;
}