您的位置:首页 > 其它

成长轨迹53 【ACM算法之路 百炼poj.grids.cn】【简单枚举】【2747、2810、2692、2977】

2012-02-22 17:32 363 查看
一次ac的没啥好说、、、

2747:数字方格

//这个。。。貌似米有什么技巧可言。。。
#include <stdio.h>
int main()
{
int i,j,k,n,t,s,max;
scanf("%d",&t);
for(s=0;s<t;s++)
{
max=0;
scanf("%d",&n);
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
for(k=0;k<=n;k++)
{
if(((i+j)%2==0)&&((j+k)%3==0)&&((i+j+k)%5==0))
{
if((i+j+k)>max)
max=i+j+k;
}
}
printf("%d\n",max);
}
return 0;
}


2810:完美立方

#include <stdio.h>
#include <string.h>

int cube[101];
int main()
{

int n;
scanf("%d",&n);
for(int i=2;i<=n;i++)//【这里应该从2开始而不是6】
{
cube[i]=i*i*i;
}
for(int a=6;a<=n;a++)
{

for(int b=2;b<a-2;b++)
{
if(cube[a]<cube[b]+cube[b+1]+cube[b+2])
break;
for(int c=b+1;c<a-1;c++)
{
if(cube[a]<cube[b]+cube[c]+cube[c+1])
break;
for(int d=c+1;d<a;d++)
{
int result=cube[b]+cube[c]+cube[d];

if(cube[a]==result)
printf("Cube = %d, Triple = (%d,%d,%d)\n",a,b,c,d);
else if(cube[a]<result)
break;
}
}
}
}

return 0;
}


2692:假币问题

//如果没有找出需求元素的思路
//就尝试将元素遍历,看看是否满足需求
#include <stdio.h>
#include <string.h>
char left[3][7],right[3][7],result[3][7];

bool islight(char c)
{
for(int i=0;i<3;i++)
{
if(result[i][0]=='u'&&strchr(right[i],c)==NULL)
{
return false;
}
else if(result[i][0]=='e'&&(strchr(left[i],c)!=NULL||strchr(right[i],c)!=NULL))
{
return false;
}
else if(result[i][0]=='d'&&strchr(left[i],c)==NULL)
{
return false;
}
}
return true;
}

bool isheavy(char c)
{
for(int i=0;i<3;i++)
{
if(result[i][0]=='u'&&strchr(left[i],c)==NULL)
{
return false;
}
else if(result[i][0]=='e'&&(strchr(left[i],c)!=NULL||strchr(right[i],c)!=NULL))
{
return false;
}
else if(result[i][0]=='d'&&strchr(right[i],c)==NULL)
{
return false;
}
}
return true;
}

int main()
{
int t;
scanf("%d",&t);
while(t--)
{
for(int i=0;i<3;i++)
{
scanf("%s %s %s",left[i],right[i],result[i]);
}
for(char c='A';c<'M';c++)
{
if(islight(c))
{
printf("%c is the counterfeit coin and it is light.\n",c);
break;
}
if(isheavy(c))
{
printf("%c is the counterfeit coin and it is heavy.\n",c);
break;
}
}
}
return 0;
}


2977:生理周期

#include "stdio.h"

int main()
{
int p,q,i,d,id=0;
while(1)
{
id++;
scanf("%d %d %d %d",&p,&q,&i,&d);
if(p==-1&&q==-1&&i==-1&&d==-1)
break;
int j;
for(j=d+1;j<21252;j++)//注意一定比d大
if((j-p)%23==0)
break;
for(;j<21252;j+=23)
if((j-q)%28==0)
break;
for(;j<21252;j+=23*28)
if((j-i)%33==0)
break;
printf("Case %d: the next triple peak occurs in %d days.\n",id,j-d);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐