传送门
1475 Problem A 掰手指头学加减
这个一遍过了,不用多说,注意以输入0结束怎么写
还有一点就是HINT中提到的注意对第一行的数字0之后的回车符的处理这一点我立马就想到应该如何解决,这个知识点我在第一次讲题的时候见识过了,不错,记住啦~嘿嘿
1496 Problem B 电量的显示
这个
emm
太着急了,因为先做的D题,但是又没做出来,心里慌慌张张。。。。。不找借口,就是粗心了
printf("case %d : ",i);
第一遍直接把“case 1 : ”粘上了,也不改改,所以错了吧,活该。。。。。
1928 Problem C 按顺序输出数字(II)
这个题之前做过了,但一直是一知半解,出来混总是要还的,今天又被它耽误了好久好久的时间,哎~
感觉今天把这题的码写得才算是透彻点
#include<stdio.h>
#include<stdlib.h>
int main()
{
int K,N,i,t = 0,flag = 1;
scanf("%d%d",&K,&N);
if(N>0)
{
printf("%d",K);
for(i = K+1; ; i++)
{
if(i>=K)
printf(" %d",i);
flag++;
if(flag==N)
break;
}
}
else if(N<0)
{
for(i = K+N+1; ; i++)
{
if(i<K)
printf("%d ",i);
flag++;
if(-flag==N-1)
{
printf("%d",K);
break;
}
}
}
else
return 0;
}
按说可以一次过的,又是犯了一个低级错误
人家样例清清楚楚
10 6
10 11 12 13 14 15
你的码是10 11 12 13 14 15 16这都意识不到?????傻子!
2230 Problem D 最大值及其位置
先跑回去看看题
看好这个“从1开始计数”
唐相杰起初两次没过的原因就是,它把这句话理解为:当输入的数是1的时候,开始计数。
我的妈呀,这不是要了我的命吗???难怪前两次没过,这可能过吗?还影响了做题的心情,哎,气死了。哪有那么多道道啊,就是最简单的理解:计数从1开始,就是1 2 3……而不是0 1 2 3……这样。整个人都无语了,,,😶说多了 都是泪。。。。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a,b,max,flag = 1,order;
scanf("%d",&b);
max = b;
while(scanf("%d",&a)!=EOF)
{
flag++;
if(a>max)
{
max = a;
order = flag;
}
}
if(max==b)
order = 1;
printf("max = %d, order = %d.",max,order);
return 0;
}
2131 Problem E 求余弦值
又又又是由于读题不仔细导致的崩盘!!!!这题到时间了都没过,我太垃圾了5555555555/(ㄒoㄒ)/~~
题
注意人家让你输入的n不是图中公式里面的n啊!!!!!!!
“根据给定的公式,求前n项的结果。输出6位小数”当我仔仔细细比对优皇的代码之后才发现这句起到决定性作用的要求啊!!!!!!!!哭死了啊!!!!5555555555555不过我也是牛逼,能比对出来,不容易啊!!!!
这是原始的码(之前没有判断(-180,180)但是有没有都一样都是Wrong Answer43%)
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
double x,up=1.0,cos=1;
int n,i,j,down,flag=1;
scanf("%lf%d",&x,&n);
while(fabs(x)>180)
{
if(x>180)
x = x-360;
if(x<-180)
x = x+360;
}
x = x*3.1415926535/180;
for(i = 2; i<=2*n; i=i+2)
{
up = up*x*x;
down = 1;
for(j = 1; j<=i; j++)
{
down = down*j;
}
cos = cos-flag*up/down;
flag = -flag;
}
printf("%lf",cos);
return 0;
}
优皇的码:感谢优皇给我看码
#include<stdio.h>
int main() {
int n;
double x, up = 1, down = 1, ans = 0;
scanf("%lf%d", &x, &n);
/*while (x > 180)
x -= 360;
while (x < -180)
x += 360;*/
x = x / 180 * 3.1415926535;
for (int i = 0, sign = 1; i <= 2 * n - 2; i++)
{
if (i % 2 == 0)
{
printf("%lf %lf\n",up,down);
ans += up / down * sign;
sign = -sign;
}
up *= x;
down *= i + 1.0;
}
printf("%.6lf", ans);
return 0;
}
网上找的码:(实验课后找的,这是高手啊)
#include <stdio.h>
#define pi 3.1415926535
int main()
{
double x,sum=1,s1=1;
int n,i,flag=-1;
scanf ( "%lf %d",&x,&n);
x=x*pi/180;
for (i=1; i<n; i++)
{
s1=s1*x*x/(2*i*(2*i-1))*(-1);
sum+=s1;
}
printf ( "%lf\n",sum);
}
网上找的一个错误的码(跟我一样43%):
#include <stdio.h>
#include <stdlib.h>
#define Pi 3.1415926
int main()
{
int i, j, n;
double x, sum = 1.0;
scanf("%lf%d", &x, &n);
x *= Pi / 180;
int a = 1, b;
double c = 1.0;
for(i = 1; i <= n + 1; i++) // 这里为什么n和n + 1没有区别
{
a *= -1;
for(j = 1, b = 1; j <= 2 * i; j++) // b要初始化的
b *= j;
c *= x * x;
sum += (a * c) / b;
}
printf("%lf", sum);
return 0;
}
}
这应该是某位直系学哥的码,也算有缘分,下面我来分析一波为啥他这个不对,其实跟我错的差不多。
他写了两个注释,第二个注释没问题,但是第一个注释问题就很大了,n和n+1的区别还是很大的,虽然都过不了,但是想过的话这里也是必须修改的,为什么他说没区别?因为用测试样例输出的答案确实是相同的,这也解释了交上还有43%的正确,其实是其他测试点出了问题,幸好,我自己搞出一个,输入120 8,比对输出答案就可发现端倪。他跟我犯错的地方是一样的,就是没有意识到输入的这个n的意义“根据给定的公式,求前n项的结果。输出6位小数”,所以我在理解之后立马意识到,这里既不是n也不是n+1更不是二者都可,而应该是n-1!!!!对!我相信这一点现在理解起来并不费劲。此外,为了跟优皇(ac码)保持一致性,这个码的b(也就是我用的down)应该改为double型变量,不然输入120 8后输出的答案也会有的误差。
最后我把它修改为:
#include <stdio.h>
#include <stdlib.h>
#define Pi 3.1415926
int main()
{
int i, j, n;
double x, sum = 1.0;
scanf("%lf%d", &x, &n);
x *= Pi / 180;
int a = 1;
double b,c = 1.0;//用double定义b结果会更加精确
for(i = 1; i <= n-1; i++)//注意题目要求,输入的n不是公式当中的n,而是代表项数,故应为n-1
{
a *= -1;
for(j = 1, b = 1; j <= 2 * i; j++)
b *= j;
c *= x * x;
sum += (a * c) / b;
}
printf("%lf", sum);
return 0;
}
修改了两个点:
1.把b用double来定义以提高答案精确度;
2.外层for循环中,应该是n-1而不是n或者n+1
1297 Problem F Beautiful Year
这个题还行,一次过了,大概就是拆数字的问题,一定要仔细验证你写的程序所拆下来的数是不是你想拆的数,既然有能力写对,那就不要事与愿违!
2020.12.9的实验到此结束,还得努力啊小唐!^ - ^