因为今年四月份要打蓝桥,提前练练手
#include
#include
#include
#include
using namespace std;
int main() {
int ans=0;
for(int i=10000;i<=99999;i++)
{
int temp=i;
int flag=0;
while(temp>0)
{
if(temp%10==4)
{
flag=1;
break;
}
temp/=10;
}
if(flag==0)
ans++;
}
cout<<ans<<endl;
return 0;
}
相信大家平常也练习过许多关于日期的题,这道题只要细心,肯定能过
主要注意最后的输出,一位数前面加0就好了
#include
#include
#include
#include
#include
using namespace std;
int main()
{
int a,b,c,n;
while(~scanf("%d%d%d%d",&a,&b,&c,&n))
{
c=c+n;
int temp=0;
while(c>0)
{
// printf("c=%d\n",c);
if(b==1||b==3||b==5||b==7||b==8||b==10||b==12)
{
if(b==12)
{
b=1;
a=a+1;
}
else
b+=1;
c=c-31;
temp=31;
}
else if(b==4||b==6||b==9||b==11)
{
c-=30;
temp=30;
b+=1;
}
else if(b==2)
{
if((a%4==0&&a%100!=0)||a%400==0)
{
c-=29;
temp=29;
}
else
{
c-=28;
temp=28;
}
b+=1;
}
}
if(b==1)
{
b=12;
a-=1;
}
else{
b-=1;
}
c=c+temp;
if(c<10&&b<10)
printf("%d-0%d-0%d\n",a,b,c);
else if(c<10)
printf("%d-%d-0%d\n",a,b,c);
else if(b<10)
printf("%d-0%d-%d\n",a,b,c);
else
printf("%d-%d-%d\n",a,b,c);
}
return 0;
}
暴力:
可知是八个不同的数字,可以用八个for循环,也可以按照竖式进行运算
#include
#include
#include
#include
#include
using namespace std;
int main() {
int book[10];
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
{
int a=(i+j)%10;
int temp1=(i+j)/10;
for(int k=0;k<10;k++)
{
for(int p=0;p<10;p++)
{
// printf("%d %d=%d\n",i,j,temp1);
if(((k+p+temp1)%10)!=j)
continue;
// printf("%d\n",temp1);
// printf("%d+%d+%d=%d$$\n",k,p,temp1,j);
int temp2=(k+p+temp1)/10;
for(int z=0;z<10;z++)
{
if((j+z+temp2)%10!=k)
continue;
int temp3=(j+z+temp2)/10;
for(int q=0;q<10;q++)
{
for(int f=0;f<10;f++)
{
if(q+f+temp3==(f*10+z))
{
memset(book,0,sizeof(book));
book[i]++;
book[j]++;
book[k]++;
book[p]++;
book[q]++;
book[a]++;
book[z]++;
sort(book,book+10);
if(book[9]==1&&q&&f)
{
printf(" %d %d %d %d\n",q,j,k,i);
printf(" %d %d %d %d\n",f,z,p,j);
printf("%d %d %d %d %d\n",f,z,k,j,a);
printf("\n");
}
}
}
}
}
}
}
}
return 0;
}
这是暴力做出来的,有三个答案,但应该是没考虑什么情况,答案是1085
下面是运用搜索的思想
开一个数组f,从0到7分别代表祥、瑞、生、辉、三、羊、献、气;在判断条件时f[0]和f[4]!=0;
#include
using namespace std;
int book[10];
int f[10];
void judge()//进行判断
{
if(f[0]!=0&&f[4]!=0)
{
if(f[0]*1000+f[1]*100+f[2]*10+f[3]+f[4]*1000+f[5]*100+f[6]*10+f[1]==f[4]*10000+f[5]*1000+f[2]*100+f[1]*10+f[7])
{
for(int i=0;i<8;i++)
printf("%d ",f[i]);
}
}
}
void dfs(int n)
{
if(n==9)
{
judge();
return;
}
for(int i=0;i<=9;i++)
{
if(book[i]==1)
continue;
else
{
book[i]=1;
f[n-1]=i;
dfs(n+1);
book[i]=0;
}
}
}
int main()
{
dfs(1);
}
有结果得出:
祥=9、瑞=5、生=6、辉=7、三=1、羊=0、献=8、气=2
三羊献瑞=1085
提交的时候直接printf就行;
可以看出用算法还是简单的很多
看起来非常简单,已经给出一个例子了就变得特别简单
思路:
可以算出 10 * 11+27 * 28-10 -11-27-28=790
只要找出四个数a*(a+1)+b*(b+1)=790就好,找到最小的数
#include
using namespace std;
int book[10];
int f[10];
int main()
{
for(int i=1;i<49;i++)
{
int a=i+1;
for(int j=a+1;j<=49;j++)
{
int b=j+1;
if(i*a+j*b-i-a-j-b==790)
printf("%d %d %d %d\n",i,a,j,b);
}
}
}
搜索水题
控制两个变量分别是摸到大小为几的牌 和 手里有几张牌,进行判断就好
#include
using namespace std;
int ans=0;
int sum=0;
void dfs(int n)
{
if(n>13||sum>13)
return;
if(n==13&&sum==13)
{
ans++;
return;
}
for(int i=0;i<5;i++)
{
sum+=i;
dfs(n+1);
sum-=i;
}
}
int main()
{
dfs(0);
printf("%d\n",ans);
}
#include
#include
using namespace std;
int main()
{
int w,m,n;
while(~scanf("%d%d%d",&w,&m,&n))
{
int h1=m/w;
int l1=(m%w-1+w)%w;
if(h1%2!=0)
l1=w-l1-1;
int h2=n/w;
int l2=(n%w-1+w)%w;
if(h2%2!=0)
l2=w-l2-1;
// printf("%d %d %d %d\n",h1,l1,h2,l2);
cout<<abs(h1-h2)+abs(l1-l2)<<endl;
}
}
还有两个题,难度跳跃大,明天再做