今天的作业难度感觉比昨天的实验还要大。。。。从十二点开始一直写到下午吃饭,中间就吃了个午饭,也是边吃边写,哎,这个过程是必须的,加油!!!
传送门
1028 Problem A 摄氏——华氏温度转换表
这题还行,好歹之前认认真真做过一次,认真写了一下一遍过了。不错哦,这里要注意精度损失的问题(也就是加个0.001或者0.01什么的)。
AC码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
// freopen("in.txt","r",stdin);
char ch,sh;
int low,high;
double step,t;
scanf("%c->%c",&ch,&sh);
scanf("%d%d%lf",&low,&high,&step);
if(ch=='C'&&sh=='F')
{
printf(" C -> F\n");
t = 1.0*low;
while(t<high+0.01)
{
printf("%5.1lf ->%6.1lf\n",t,1.8*t+32);
t = t+step;
}
}
if(ch=='F'&&sh=='C')
{
printf(" F -> C\n");
t = 1.0*low;
while(t<high+0.01)
{
printf("%5.1lf ->%6.1lf\n",t,(t-32)*5/9);
t = t+step;
}
}
return 0;
}
可能有点长,但是思路很简单的~
1029 Problem B 1!+2!+…+k!=?
这个题,emm有点投机取巧吧
做得有些着急,前两次都是超时83%
直接上码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
// freopen("in.txt","r",stdin);
int N,i,a,b,max,min;
while(1)
{
scanf("%d",&N);
if(N==0)
break;
scanf("%d",&b);
max = min = b;
for(i = 2; i<=N; i++)
{
scanf("%d",&a);
if(a>max)
max = a;
if(a<min)
min = a;
}
printf("%d\n",(max-min)*2);
}
return 0;
}
现在找最大值最小值的还算是比较精通了
1119 Problem C 购物的路程
这个很简单了,当初做实验遇到也是一次过,就是题有点长,有点吓人
码略
1040 Problem D 求一元二次方程的根
这个单独开一篇吧,挺费劲的
1145 Problem E 求累加和
这题我感觉我自己做的很好,但是别人也有很多一次过的,有空再继续看看
码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
// freopen("in.txt","r",stdin);
int min,max,N,i;
double sum;
scanf("%d",&N);
for(i = 1;i<=N;i++)
{
scanf("%d%d",&min,&max);
sum = (double)((1.0*max*(max+1))/2)-(double)((1.0*min*(min+1))/2)+min;
printf("case %d:sum=%d.\n",i,(int)sum);
}
return 0;
}
12.13 14:10补充:
我感觉这个写法还是有点不靠谱,因为老师说实数运算有精度损失什么的,我这先实数再整数感觉存在隐患。然后我就试着直接int sum不要1.0*那些交了一次,也是过了(100分变成99了…),但是我键入“1 30000 50000”,这个程序的输出就是负的,不对了,但是这个是合理的输入,所以这个题的测试点应该是不够极端,这题出的不好。
我对我自己的程序进行了简单的修改,扩大了它能计算的范围,而且不用考虑精度损失的问题:
#include<stdio.h>
#include<stdlib.h>
int main()
{
// freopen("in.txt","r",stdin);
int min,max,N,i;
int sum;
scanf("%d",&N);
for(i = 1; i<=N; i++)
{
scanf("%d%d",&min,&max);
if(max%2==0&&min%2==0)
sum = (max/2*(max+1))-(min/2*(min+1))+min;
else if(max%2==0&&min%2!=0)
sum = (max/2*(max+1))-(min*((min+1)/2))+min;
else if(max%2!=0&&min%2==0)
sum = (max*((max+1)/2))-(min/2*(min+1))+min;
else if(max%2!=0&&min%2!=0)
sum = (max*((max+1)/2))-(min*((min+1)/2))+min;
printf("case %d:sum=%d.\n",i,sum);
}
return 0;
}
增加了奇数偶数的判断,删去了double转int的步骤。
Problem F: 笛卡尔平面
这题纯属唬人,题目看起来那么老长,其实写起来很简单,长点记性哈,别被题目吓傻了
码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
// freopen("in.txt","r",stdin);
double x,y;
scanf("(%lf, %lf)",&x,&y);
if(x>0.0&&y>0.0)
printf("(%.1lf, %.1lf) is in quadrand I",x,y);
else if(x>0.0&&y<0.0)
printf("(%.1lf, %.1lf) is in quadrand IV",x,y);//这里注意一下,四的罗马字母不是IIII而是IV,因为马虎没有做到一遍过。。。。。
else if(x<0.0&&y<0.0)
printf("(%.1lf, %.1lf) is in quadrand III",x,y);
else if(x<0.0&&y>0.0)
printf("(%.1lf, %.1lf) is in quadrand II",x,y);
else if(x==0.0&&y==0.0)
printf("(0.0, 0.0) is origin");
else if(x==0.0&&y>0.0||x==0.0&&y<0.0)
printf("(%.1lf, %.1lf) is on the y axis",x,y);
else if(x<0.0&&y==0.0||x>0.0&&y==0.0)
printf("(%.1lf, %.1lf) is on the x axis",x,y);
return 0;
}
2302 Problem G 输出回字形
这题也单独写一篇吧,这题是真遇到自己的短板了,需要加强啊!!!!!
总体而言,今天的作业我做的还算比较满意,至少之前做过的题以及类似题都能很快找到思路并且解出来,D是真的麻烦,也不是不会,就是分类讨论太多了(可能是我的方法不太合适,但是也都差不多得写80行多),G是真不会,遇到这种图形题就变呆逼。。。没办法多见题多练题是唯一的解决办法,加油吧!!!!!