1. (2')土地测量
造成高房价的原因有许多,比如土地出让价格。既然地价高,土地的面积必须仔细计算。遗憾的是,有些地块的形状不规则,比如是如图【1.jpg】中所示的五边形。
一般需要把它划分为多个三角形来计算。
已知三边求三角形的面积需要用海伦定理,参见【2.jpg】
【分析】使用海伦公式,计算三角形ABE、三角形BCE、三角形CDE的面积之和即可。所求结果即土地面积
#include
#include
int main()
{
double AB = 52.1;
double BC = 57.2;
double CD = 43.5;
double DE = 51.9;
double EA = 33.4;
double EB = 68.2;
double EC = 71.9;
double s1,s2,s3;
double a1,a2,a3,sum;
s1=(AB+EB+EA)/2;
s2=(EB+BC+EC)/2;
s3=(CD+EC+DE)/2;
a1=sqrt(s1*(s1-AB)*(s1-EB)*(s1-EA));
a2=sqrt(s2*(s2-EB)*(s2-BC)*(s2-EC));
a3=sqrt(s3*(s3-CD)*(s3-EC)*(s3-DE));
sum=a1+a2+a3;
printf("%.2lf\n",sum);
return 0;
}
【答案】3789.86
2. (3')卖鸡蛋
大数学家欧拉在集市上遇到了本村的两个农妇,每人跨着个空篮子。她们和欧拉打招呼说两人刚刚卖完了所有的鸡蛋。
欧拉随便问:“卖了多少鸡蛋呢?”
不料一个说:“我们两人自己卖自己的,一共卖了150个鸡蛋,虽然我们卖的鸡蛋有多有少,但刚好得了同样的钱数。你猜猜看!”
欧拉猜不出。
另一个补充道:“如果我按她那样的价格卖,可以得到32元;如果她按我的价格卖,可以得到24.5元”。
欧拉想了想,说出了正确答案。
我们不是数学家,懒得列出公式来分析。但计算机可以“暴力破解”,就是把所有可能情况都试验一遍,撞上为止!
请写出每人鸡蛋的数目(顺序不限),用逗号隔开。
答案写在“解答.txt”中,不要写在这里!
【分析】循环+枚举
双层循环,枚举两个人鸡蛋的数目,随时记录对方的单价。注意浮点数大小的比较问题
#include
#include
int main()
{
int i,j;
double p1,p2;
for(i=1;i<=150;i++)
{
for(j=1;j<=150;j++)
{
if(i+j!=150)
continue;
p1=24.5/j;
p2=32.0/i;
if(fabs(i*p1-j*p2)<1e-8)
printf("%d,%d\n",i,j);
}
}
return 0;
}
【答案】80 70
3. (5')古堡算式
福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:
ABCDE * ? = EDCBA
他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”
华生:“我猜也是!”
于是,两人沉默了好久,还是没有算出合适的结果来。
请你利用计算机的优势,找到破解的答案。
把 ABCDE 所代表的数字写出来。
答案写在“解答.txt”中,不要写在这里!
【分析】暴力枚举+去重
根据数的特点,A ? E的取值范围[1, 9],B C D E的取值范围[0, 9],使用五层循环枚举即可。需要注意的是,A B C D E所代表的数字不能有重复,因此需去重。
#include
int main()
{
int a[5];
int n1,n2,ret;
for(a[0]=1;a[0]<10;a[0]++)
{
for(a[1]=0;a[1]<10;a[1]++)
{
if(a[1]==a[0])
continue;
for(a[2]=0;a[2]<10;a[2]++)
{
if(a[2]==a[1] || a[2]==a[0])
continue;
for(a[3]=0;a[3]<10;a[3]++)
{
if(a[3]==a[2] || a[3]==a[1] || a[3]==a[0])
continue;
for(a[4]=1;a[4]<10;a[4]++)
{
if(a[4]==a[3] || a[4]==a[2] || a[4]==a[1] || a[4]==a[0])
continue;
n1=a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4];
ret=a[4]*10000+a[3]*1000+a[2]*100+a[1]*10+a[0];
for(n2=1;n2<10;n2++)
{
if(n1*n2==ret)
printf("%d * %d = %d\n",n1,n2,ret);
}
}
}
}
}
}
return 0;
}
【答案】21978
4. (6')巧排扑克牌
小明刚上小学,学会了第一个扑克牌“魔术”,到处给人表演。魔术的内容是这样的:
他手里握着一叠扑克牌:A,2,....J,Q,K 一共13张。他先自己精心设计它们的顺序,然后正面朝下拿着,开始表演。
只见他先从最下面拿一张放到最上面,再从最下面拿一张翻开放桌子上,是A;然后再从最下面拿一张放到最上面,再从最下面拿一张翻开放桌子上,是2;......如此循环直到手中只有一张牌,翻开放桌子上,刚好是K。
这时,桌上牌的顺序是:A,2,3,4,5,6,7,8,9,10,J,Q,K
请你计算一下,小明最开始的时候手里牌的顺序是怎样的。
把结果写出来,逗号分割,小明“魔术”开始时,最下面的那张牌输出为第一个数据。
考场不提供扑克牌,你只能用计算机模拟了,撕碎草稿纸模拟扑克属于作弊行为!另外,你有没有把录像倒着放过?很有趣的!回去试试!
【分析】
【答案】
5.
6.
7.
8.
9.
10.