2011级第二次上机解题报告
提醒一下大家,请大家相信我们助教,有问题可以先找我们,如果直接找宋老师,一来他平常比较忙,二来他也会转发给我们,所以请大家有问题可以直接和我们联系。
很多人提到这次的题目超纲,很多内容没有学过,但实际上运用我们学过的知识就已经可以解决这些问题了。另请大家仔细阅读发给你们的邮件以及赛事主页的相关说明,很多东西实际上已经说过,你们自己不去看我们也没办法。甚至是我们课前当场说过的知识都有人问。编程注重的是实践,仅靠几次上机训练肯定是不够的,大家平时要多多练习。初期大家也不要太在意过题数,抱怨题目难。考虑到大家初学,已经比往年难度降低很多了,总不可能每次的题目都110人过全部的题啊。希望大家端正态度,不要抄袭。
A 晴天小猪的圣诞节
Problem Description
圣诞节马上就要到了,晴天小猪想在圣诞节之夜邀请他的好朋友来家里举办一个开心的party。晴天小猪有很多很多的好朋友:雨天小猪、晴天大猪、晴天胖猪···可是他的家比较小,不能把所有好朋友都请来,于是他决定只请他最好的朋友。
每个好朋友在晴天小猪心中都有一个好感度,这个好感度会是一个1~99999的整数,如果这个数反过来和本身一样(即回文数,比如11、131),那么这个好朋友就是他最好的朋友。
现在小猪列出了所有好朋友的好感度,请告诉他他一共要请几个最好的朋友呢?
Input
第一行为一个整数n,表示共有n组测试数据(1<=n<=100)。每组测试数据有两行,第一行为一个整数k,表示晴天小猪共有k个好朋友(1<=k<=100),第二行有k个1~99999的整数,表示每个好朋友的好感度。
Output
对于每组数据输出占一行,为最好的朋友个数ans。
Sample Input
3
2
121 45654
3
26 35 84
1
1
Sample Output
2
0
1
此题很多人说没学过数组,超纲了,但实际上这题考察的不是数组。数据在100000以下,int是足够存的,对数字直接操作就行了。顺便提一下对于一个十进制的整数,如何取出各
位数字。设这个数为x,则x%10为这个数的个位,再令x=x/10,于是整个数字就只剩下前面的部分,不停的重复就可以取出各位的数字了。具体见代码。
标程:
#include
using namespace std;
int main()
{
int n,k;
int i;
int a,number,t,ans;
cin>>n;
while(n--)
{
cin>>k;
ans=0;
for (i=1;i<=k;i++)
{
cin>>a;
number=a;
t=0;
while(number!=0)//用循环即可判定是否取完,不必写一摞if然后对应着相应的除以10000什么的。
{
t=t*10+number%10;
number=number/10;
}
if (t==a) ans++;//有人把“等于”和赋值弄混的,请注意!
}
cout<
}
return 0;
}
B 晴天小猪的数学题
Problem Description
Party过几天就要举行了,可是晴天小猪还有一堆的数学作业没做。我们知道晴天小猪很笨,那么多的数学题他肯定做不完了,你能帮帮他吗?
晴天小猪这次的作业是解一元二次方程。给出系数a、b、c,请给出方程的结果。若方程无解,则输出“No Answer”;若方程只有一个解,则输出该解;若方程有两个解,则输出这两个解的差的绝对值。
Input
第一行为一个整数n,表示共有n组测试数据(1<=n<=100)。每组测试数据为一行,有三个整数a,b,c,代表三个系数,数据保证a,b,c为 -100~100 的整数且a不等于0。
Output
对于每组输入数据,输出一行结果,结果保留2位小数。
Sample Input
2
4 2 3
1 2 1
Sample Output
No Answer
-1.00
解一元二次方程,这个没什么好说的,仔细看注释。
标程:
#include
#include
#include
using namespace std;
int main()
{
int n;
int a,b,c;
cin>>n;
while(n--)
{
cin>>a>>b>>c;
if ((b*b-4*a*c)<0)
cout<
else if ((b*b-4*a*c)==0)//a,b,c取double的同学,请注意do