您的位置:首页 > 其它

水题几枚zoj 1195 zoj 2421 zoj 2405 zoj 2835 zoj 1274

2011-01-23 20:53 239 查看
/*zoj 1195  水题一枚。。原来想做呢。没写,今天看到dang同学写了,就看了下。。果断a掉
* 说的是家里有很多电器,但是电器全开的话就会超过家庭用电的最大功率。
*
* 然后给你一些电器和各个电器所使用的功率。然后又给出了几个操作,问按照操作的顺序
* 是否会超出额定功率。如果超出就输出超出了。。
* 如果没有那么就输出按照这个操作所能达到的最大功率。
*
*
* zjy 20110121
*
* */
#include <stdio.h>
#include <string.h>
int main(void)
{
int n,m,c;    // n,电器的数目,m,操作的数目,c限额;
int status[25]; //描述电器的状态;
int cap ;   //记录当前所消耗的电量;
int maxcap ; //记录最多所消耗的电量;
int flag; //标记是否超出规定的电量;
int a[25];
int op,count=1;
while (scanf("%d %d %d",&n,&m,&c) != EOF)
{

if(n==0&&m==0&&c==0) break;

printf("Sequence %d/n",count++);
cap = 0; maxcap = 0; flag = 0;
memset(status,0,sizeof(status));
for (int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(int i=1;i<=m;i++)
{
scanf("%d",&op);
if(status[op] == 0)
{
status[op] =1;
cap+=a[op];
if(cap<=c&∩>=maxcap)
maxcap=cap;
//if(cap>c)
}
else
{
status[op] = 0;
cap-=a[op];
}
if(cap>c)
flag = 1;
}
if(flag == 1)
printf("Fuse was blown./n/n");
else
printf("Fuse was not blown./nMaximal power consumption was %d amperes./n/n",maxcap);
}
return 0;
}


===========================分一下===============================

/* zoj 2421 水题一枚。。。貌似我现在也只会做水题了阿。。。纠结。。。
* 这题说的是一个什么什么序列,这个序列首位是0然后下一位是前一位减去m。m是该元素在序列中的位置。如果得到的结果大于零,并且在序列中没有出现过,那么成立。
* 如果不能满足这个条件的话,就要把这个元素的值改为a[m-1]+m;
*
* 这道题一开始我判断元素是否重复是通过一个一个找来判断的。结果发现速度很慢。。也确实,一个一个找那得找多少次阿。。
* 后来看别人的代码才发现原来标记以下这个元素是否出现过不就完了么?
*
* 真纠结,,,不过也学到点经验呢。。。
*
* 20110120
*
*
*
*
* */

#include <stdio.h>
int a[500002]={0};         //{0,1,3,6,2,7,13,20,12,21,11,22,10,23,9};
int b[4000020]={0};
int main(void)
{
b[0]=1;
int i,n;
for(i=1;i<500001;i++)
{
a[i]=a[i-1]-i;

if(a[i]<=0 || b[ a[i] ] == 1)
{
a[i]=a[i-1]+i;
}
b[ a[i] ] = 1;
}
while(scanf("%d",&n) != EOF && n!=-1)
{
printf("%d/n",a
);

}
return 0;
}


===========================分一下===============================

/* zoj 2405  党童鞋提供的水题,好久没刷题了。好生疏
*
*
* 题目的意思是找出从2992开始的四位数中10进制12进制16进制每位上的数加起来的和相等的数。
*
* 21000120
*
* */
#include <stdio.h>
int sum(int n)
{
int i,sum=0;
while(n)
{
i=n%10;
sum+=i;
n/=10;
}
return sum;
}
int main(void)
{
int n=2992,nn,nnn;
int sum12=0,sum16=0;
int i;
while(n<2996)
{
sum12=0;sum16=0;
nnn=nn=n;
while(nnn)
{
i=nnn%16;
nnn/=16;
sum16+=i;
}
while(nn)
{
i=nn%12;
nn/=12;
sum12+=i;
}
if(sum16==sum12&&sum12==sum(n))
printf("%d/n",n);
n++;
}
return 0;
}


===========================分一下===============================

/* zoj 2835 Magic Square
* 水题 判断幻方的。。
* zjy 20110123
*
* */

#include <stdio.h>
#include <string.h>
int a[20][20];
int n;
int H_check()
{
int sum = 0;
for (int j=0;j<n;j++)
sum+=a[0][j];
for(int i=0;i<n;i++)
{
int temp_sum=0;
for (int j=0;j<n;j++)
temp_sum+=a[i][j];
if(temp_sum != sum)
return 0;
}
return sum;
}
int L_check()
{
int sum = 0;
for (int j=0;j<n;j++)
sum+=a[j][0];
for(int i=0;i<n;i++)
{
int temp_sum=0;
for (int j=0;j<n;j++)
temp_sum+=a[j][i];
if(temp_sum != sum)
return 0;
}
return sum;
}
int A_check()   //判断对角线上的元素之和是否相等。。相等就返回对角线上的元素之和。不想等就返回0;
{
int sum1=0,sum2=0;
for(int i=0;i<n;i++)
sum1+=a[i][i];
for (int i=0;i<n;i++)
sum2+=a[i][n-i-1];
if(sum1==sum2)
return sum1;
return 0;
}
int main(void)
{
int used[10002];
while(scanf("%d",&n) != EOF && n)
{
memset(a,0,sizeof(a));
memset(used,0,sizeof(used));
int flag = 0;
for (int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
if( used[ a[i][j] ] )
flag = 1;   //那么肯定不是一个幻方;
else
used[a[i][j]] = 1;
}
if(!flag&&H_check()&&H_check()==L_check()&&H_check()==A_check())
printf("Yes/n");
else
printf("No/n");
}
return 0;
}


===========================分一下===============================

/*zoj 1274 模拟题。。
* zjy 20110123
*
* */

#include <stdio.h>
#include <string.h>
int getNum(char a[])
{
if(a[0]>='a'&&a[0]<='z')
a[0]-=32;
if (strcmp(a,"A") == 0) return 1;
if (strcmp(a,"A#") == 0 || strcmp(a,"Bb")==0) return 2;
if (strcmp(a,"B") == 0) return 3;
if (strcmp(a,"C") == 0) return 4;
if (strcmp(a,"C#") == 0|| strcmp(a,"Db")==0) return 5;
if (strcmp(a,"D") == 0) return 6;
if (strcmp(a,"D#") == 0|| strcmp(a,"Eb")==0)  return 7;
if (strcmp(a,"E") == 0) return 8;
if (strcmp(a,"F") == 0) return 9;
if (strcmp(a,"F#") == 0|| strcmp(a,"Gb")==0)  return 10;
if (strcmp(a,"G") == 0)  return 11;
if (strcmp(a,"G#") == 0|| strcmp(a,"Ab")==0)  return 12;
}
int B_judge(int a,int b,int c)
{

if(a>b) { a^=b;b^=a;a^=b; }
if(b>c) { b^=c;c^=b;b^=c; }
if(a>b) { a^=b;b^=a;a^=b;}
if(c-b==4&&b-a==3) return a;
if(a+12-c==4&&c-b==3) return b;
if(b+12-a-12==4&&a+12-c ==3) return c;
return 0;
}
int A_judge(int a,int b,int c)
{

if(a>b) { a^=b;b^=a;a^=b;}
if(b>c) { b^=c;c^=b;b^=c; }
if(a>b) { a^=b;b^=a;a^=b;}
if(c-b==3&&b-a==4) return a;
if(a+12-c==3&&c-b==4) return b;
if(b+12-a-12==3&&a+12-c ==4) return c;
return 0;
}
int main(void)
{
char aa[12][3]={"A","A#","B","C","C#","D","D#","E","F","F#","G","G#"};
char str1[3],str2[3],str3[3],str11[3],str22[3],str33[3];
int a,b,c;
while (scanf("%s %s %s",str1,str2,str3) != EOF)
{
strcpy(str11,str1);
strcpy(str22,str2);
strcpy(str33,str3);
a = getNum(str1);
b = getNum(str2);
c = getNum(str3);
if ( A_judge(a,b,c) )
printf("%s %s %s is a %s Major chord./n",str11,str22,str33,aa[A_judge(a,b,c)-1]);
else if( B_judge(a,b,c) )
printf("%s %s %s is a %s Minor chord./n",str11,str22,str33,aa[B_judge(a,b,c)-1]);
else
printf("%s %s %s is unrecognized./n",str11,str22,str33);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: