[原创]算法艺术与信息学竞赛-学习记录-程序(1)
/*算法艺术与信息学竞赛 试题1.2.3*/请回答下面的问题,各题都恰有一个答案是正确的
(1)第一个答案B的问题是哪一个?
(A)2 (B)3 (C)4 (D)5 (E)6
(2)恰好有两个连续问题的答案是一样的,它们是:
(A)2,3 (B)3,4 (C)4,5 (D)5,6 (E)6,7
(3)本问题答案和哪个问题的答案相同
(A)1 (B)2 (C)4 (D)7 (E)6
(4)答案是A的问题的个数是
(A)0 (B)1 (C)2 (D)3 (E)4
(5)本题和哪个题答案相同
(A)10 (B)9 (C)8 (D)7 (E)6
(6)答案是A的问题的个数和答案是什么的问题个数相同
(A)B (B)C (C)D (D)E (E)以上都不是
(7)按照字母排序,本问题的答案和下一个问题的答案相差几个字母
(A)4 (B)3 (C)2 (D)1 (E)0
(8)答案是元音字母的问题个数是
(A)2 (B)3 (C)4 (D)5 (E)6
(9)答案是辅音字母的问题个数是
(A)一个质数 (B)一个阶乘数(C)一个平方数(D)一个立方数(E)5的倍数
(10)本问题的答案是
(A)A (B)B (C)C (D)D (E)E
/*经验:
1.书写逻辑性强的程序首次书写时以准确为主,
可以适当先减少优化量,待程序测试通过出正
确解后再优化。
2.注意可能性的排除,不要过分追求效率导致
出现排除错误;同时要对必要的逻辑排除写完
善(例如本程序最终出了4个解,其中前3个其
实应该按照题意排除掉但本程序并没有,需要
手工对此四个解进行验证,实现的并不完美)。
*/
#include<stdio.h>
#include<conio.h>
char s[11];
int dfs(int now)
{
int i,j,k;
int flag;
int count;
int c[5]={0};
if(now==11)
{
i=1;
while(s[i]!='b' && i<11) i++;
if(i==(s[1]-'a'+2))
{
flag=0;
for(i=1;i<10;i++)
if(s[i]==s[i+1])
{
flag=1; break;
}
if(flag)
{
flag=0;
if(i==(s[2]-'a'+2))
{
if((s[1]==s[3] && s[3]=='a') ||
(s[2]==s[3] && s[3]=='b') ||
(s[4]==s[3] && s[3]=='c') ||
(s[7]==s[3] && s[3]=='d') ||
(s[6]==s[3] && s[3]=='e'))
{
for(i=1;i<11;i++) c[s[i]-'a']++;
if(c[0]==(s[4]-'a'))
{
if(s[5]==s[10-s[5]+'a'])
{
if((c[s[6]-'a']==c[0]) ||
(s[6]=='e' && c[0]!=c[1] && c[0]!=c[2] && c[0]!=c[3] && c[0]!=c[4]))
{
count=s[8]-s[7];
if(count<0) count=-count;
if((s[7]-'a'+count)==4)
{
count=c[0]+c[4];
if((s[8]-'a'+2)==count)
{
count=10-count;
if((s[9]=='a' && (count==2 || count==3 || count==5 || count==7)) ||
(s[9]=='b' && (count==1 || count==2 || count==6)) ||
(s[9]=='c' && (count==1 || count==4 || count==9)) ||
(s[9]=='d' && (count==1 || count==8)) ||
(s[9]=='e' && (count==0 || count==5 || count==10)))
{
for(i=1;i<11;i++) printf("%c ",s[i]); printf("\n");
}
}
}
}
}
}
}
}
}
}
return;
}
for(i='a';i<'f';i++)
{
s[now]=i;
dfs(now+1);
}
return;
}
int main(void)
{
int i,j,k;
dfs(1);
printf("\nFINISH!\n");
getch();
return 0;
}
/*算法艺术与信息学竞赛 试题1.2.4*/
/*
经验:
1.注意积累库函数,如floor()可以求不大于num的最大整数
2.注意输入输出非整数时的输入输出格式
*/
#include<stdio.h>
#include<math.h>
#include<conio.h>
int main(void)
{
double p,q;
int n,m;
double x=0;
scanf("%lf%lf",&p,&q);
p/=100;
q/=100;
do
{
x+=1;
n=(int)(x*p+0.000001);
m=(int)(x*q-0.000001);
}while(m-n==0);
printf("%.0lf",x);
getch();
return 0;
}
[[it] 本帖最后由 卧龙孔明 于 2008-1-30 11:51 编辑 [/it]]