可惜脑子不够快,手速也不够快,第二题想了好长时间才发现是一个很简单的规律,就是3^(3*n)-7*n;
也就是每个位置都可以选一到三三个数,然后减去全部都是六的情况就行了,而且n为1的情况hint也给了,
就很简单了,然而我还是想了半天。第三题构造题,也没什么说的。然后做第四题的时候已经没有时间了,
可惜了,第四题表面上是一个数论题,然而其实乱搞就能过,没什么说的,不明白的看代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <set>
#include<cmath>
#include<climits>
#include<vector>
#include<cfloat>
#include<queue>
#include<cctype>
#include<cstdlib>
#define LL long long
using namespace std;
const LL mod=1e9+7;
const int N=1e5+10;
int is_prim(int n)
{
for(int i=2;i<=(int)sqrt(n);i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int n;
while(cin>>n)
{
int vis[1000];
int cnt=0;
int tem=n;
int c=0;
int a[4];
while(tem)
{
for(int i=tem;i>=2;i--)
{
if(is_prim(i))
{
int flag=0;
for(int j=0;j<cnt;j++)
{
if(i==vis[j])
{
flag=1;
break;
}
}
if(flag)
continue;
a[c]=i;
c++;
tem-=i;
break;
}
}
if(tem==1||c>3)
{
vis[cnt++]=a[0];
c=0;
tem=n;
}
}
cout<<c<<endl;
for(int i=0;i<c-1;i++)
cout<<a[i]<<' ';
cout<<a[c-1]<<endl;
}
return 0;
}