煤球数目(暴力)
Description
有一堆煤球,堆成三角棱锥形。具体:
第一层放1个,
第二层3个(排列成三角形),
第三层6个(排列成三角形),
第四层10个(排列成三角形),…
如果一共有100层,共有多少个煤球?
请填表示煤球总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
Input
无
Output
仅仅填写一个整数(填空题不填写代码),表示煤球总数目的数字。
代码
#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
long long ans=0;
int k=0;
for(int i=1;i<=100;i++){
k+=i;
ans+=k;
}
cout<<ans;
return 0;
}
生日蜡烛(暴力)
Description
某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?
请填写他开始过生日party的年龄数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
Input
无
Output
输出一个整数。开始过生日party的年龄数。
答案:
26
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
for(int i=1;i<=236;i++){
for(int j=i;j<=236;j++){
int ans=0;
for(int k=i;k<=j;k++){
ans+=k;
}
if(ans==236){
cout<<i;
return 0;
}
}
}
return 0;
}
凑算式(暴力)
答案:
29
代码
#include<bits/stdc++.h>
using namespace std;
int a[10];
int main(){
for(int i=1;i<=9;i++) a[i]=i;
int cnt=0;
do{
int A=a[1],B=a[2],C=a[3],D=a[4]*100+a[5]*10+a[6],E=a[7]*100+a[8]*10+a[9];
int x=B*E+C*D,y=(10-A)*C*E;
if(x==y) cnt++;
}while(next_permutation(a+1,a+10));
cout<<cnt;
return 0;
}
方格填数(暴力)
Description
如下的10个格子
填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
Input
无
答案:
1580
代码
#include<bits/stdc++.h>
using namespace std;
int a[4][5];
int b[10];
int x[8]={1,0,-1,0,1,1,-1,-1},y[8]={0,1,0,-1,1,-1,1,-1};
bool check(){
for(int i=1;i<=3;i++){
for(int j=1;j<=4;j++){
if(a[i][j]==100) continue;
for(int k=0;k<8;k++){
int xx=i-x[k],yy=j-y[k];
if(xx>0&&yy>0&&xx<=3&&yy<=4){
if(a[xx][yy]==a[i][j]-1) return false;
if(a[xx][yy]==a[i][j]+1) return false;
}
}
}
}
return true;
}
int main(){
for(int i=0;i<=9;i++) b[i]=i;
a[1][1]=100,a[3][4]=100;
int ans=0;
do{
int num=0;
for(int i=1;i<=3;i++){
for(int j=1;j<=4;j++){
if(a[i][j]==100) continue;
a[i][j]=b[num++];
}
}
//cout<<num<<endl;
if(check()){
ans++;
}
}while(next_permutation(b,b+10));
cout<<ans;
return 0;
}
剪邮票(DFS)
Description
如图1,有12张连在一起的12生肖的邮票。
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)
比如,图2,图3中,粉红色所示部分就是合格的剪取。
请你计算,一共有多少种不同的剪取方法。
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
Input
无
Output
输出一个整数。表示方案数目。
答案:
116
代码
#include<bits/stdc++.h>
using namespace std;
int aa[4][5];
int ba[13];
bool v[13],g[4][5];
int h[4]={0,0,-1,1},l[4]={1,-1,0,0};
int ans;
void dfs(int x,int y){
g[x][y]=true;
if(ans==5) return ;
for(int i=0;i<4;i++){
int xx=x-h[i],yy=y-l[i];
if(v[aa[xx][yy]]&&!g[xx][yy]&&xx>0&&yy>0&&xx<=3&&yy<=4) ans++,dfs(xx,yy);
}
return;
}
int main(){
for(int i=1;i<=12;i++) ba[i]=i;
int num=1;
for(int i=1;i<=3;i++)
for(int j=1;j<=4;j++) aa[i][j]=num++;
int an=0;
for(int a=1;a<13;a++)
for(int b=1;b<13&&a!=b;b++)
for(int c=1;c<13&&c!=a&&c!=b;c++)
for(int d=1;d<13&&d!=a&&d!=b&&d!=c;d++)
for(int e=1;e<13&&e!=a&&e!=b&&e!=c&&e!=d;e++){
memset(v,0,sizeof v);
memset(g,0,sizeof g);
ans=1;
v[a]=v[b]=v[c]=v[d]=v[e]=true;
int x,y;
bool A=0;
for(int i=1;i<=3;i++){
for(int j=1;j<=4;j++){
if(v[aa[i][j]]) x=i,y=j,A=1;
if(A) break;
}
if(A) break;
}
dfs(x,y);
if(ans==5) an++;
}
cout<<an;
return 0;
}