
Volume 1.3 Maths-Misc
深蓝色的猫
一个努力成长为大牛的蒟蒻程序媛
展开
-
UVa OJ 113
1、刚看这题把我吓了一跳,难道要大数开方?网上一搜,发现用double即可。记住double最高可以达到10^308。2、注意四舍五入。#include #include int main(void){ double n,p; while(scanf("%lf%lf",&n,&p)==2) { printf("%d\n",(int原创 2013-02-22 21:42:22 · 304 阅读 · 0 评论 -
UVa OJ 10161
1、找规律题,容易出错,多弄些测试数据。#include int main(void){ int count,n,minus; while(scanf("%d",&n)==1) { if(n==0) break; count=1; while(count*count coun原创 2013-02-22 23:45:31 · 293 阅读 · 0 评论 -
UVa OJ 10177
1、本题要求找规律,注意求长方体的个数用排列组合知识:C(n+1,2)*C(n+1,2)是边长为n的正方形所包含的长方形个数,注意题目区分了正方形和长方形,因此所得到的长方形数要减去正方形数(n^2+(n-1)^2+……+1^2)。更高维的依此类推。就是考不完全归纳法。#include int main(void){ long long int n; while(s原创 2013-02-25 23:37:46 · 345 阅读 · 0 评论 -
UVa OJ 846
1、刚开始漏了两个数相等的情况。做这种数学类杂题一定要注意边界条件。多考虑几次,多试几个测试数据再交。2、思路就不讲了,看程序很容易理解。总之,就是在可能范围内尽量形成比较大的数字,越大越好。#include #include int main(void){ int n,a,b,m,i,x,y,temp; scanf("%d",&n); while原创 2013-02-24 20:19:13 · 302 阅读 · 0 评论 -
UVa OJ 10790
1、我的IDE有点问题,用long long int时,太大的数必须用%I64d才能显示,但是交到OJ上是错的,OJ上必须是%lld,因此以后调试的时候用%I64d,交的时候再改回来。2、这道题用double然后舍去末尾数字是错的,不知道为什么。3、刚开始想得很复杂,因为是根据有多少条线段来算的,还要排除有公共点的线段和平行的线段,非常麻烦。后来上网看到别人的解法,是根据四边形的数目来算的原创 2013-02-25 12:48:34 · 291 阅读 · 0 评论 -
UVa OJ 10014
1、这道题刚开始想不出来,看了别人给的提示,原来需要一步一步推导。2、刚开始我想用枚举法,但是a是连续量,不能枚举。阅读了别人的提示才知道,其实中间这些可以消去的,首先得到通过题目给出的公式,抵消掉相同项,得到第一个式子:a1+an=a0+an+1-2Sn,然后依次写出a1+an-1=,a1+an-2=……然后这些式子相加,最后可以消去多余项,就能求出a1了。目标要明确,即a1不变,其他的量在原创 2013-02-26 18:17:29 · 338 阅读 · 0 评论 -
UVa OJ 10916
1、这题一开始没有思路,到网上搜了别人的解题报告,发现用对数做的。2、涉及超大幂的比较,应该用对数把数值降下来。阶乘加一个对数符号可转化为加法,这样就不会溢出。注意c语言中ln是log,lg是log10。#include #include int main(void){ int n,temp,i; double ans,temp1; while(s原创 2013-02-26 16:51:30 · 308 阅读 · 0 评论 -
UVa OJ 10719
1、挺简单的题目,模拟即可,注意sscanf的使用。#include int main(void){ int n,i,j,a[10010]={0},b[10010]={0}; char s[100000]=""; while(scanf("%d",&n)==1) { char*p; int t;原创 2013-02-25 22:48:49 · 319 阅读 · 0 评论 -
UVa OJ 11044
1、so easy~注意最外层一圈不用考虑。#include #include int main(void){ int n,a,b,c,d; scanf("%d",&n); while(n--) { scanf("%d%d",&a,&b); a-=2;b-=2; if(a%3==0)原创 2013-02-25 22:06:35 · 258 阅读 · 0 评论 -
UVa OJ 621
1、非常简单,枚举即可。#include int main(void){ int n,i; char s[200]=""; scanf("%d",&n); while(n--) { scanf("%s",s); if(s[0]=='1'&&s[1]=='\0'||s[0]=='4'&&s[1]=='\原创 2013-02-23 20:32:06 · 305 阅读 · 0 评论 -
UVa OJ 10499
1、轻敌是杯具的源头!首先是特殊情况n为1的时候,不是25%而是0%!其次是n为2147483647的时候,溢出再次杯具!应该用double然后精确到整数,这点数double还不至于运算错误!2、做题的时候,尤其是数学类的题目的时候,考虑最大情况和最小情况!这要记在心里!很容易的题往往都有陷阱!分不是那么好拿的!#include int main(void){ int n原创 2013-02-24 22:38:47 · 310 阅读 · 0 评论 -
UVa OJ 573
1、本题WA了2次,主要原因可能是浮点数误差。刚开始,我是每次将百分比改变,再将u乘以改变后的百分比,这样误差就大了。后来改为先算出下降高度,每次再减去下降高度,这样误差就小(不涉及乘除了,而且每次减去的是定值)。2、浮点数的误差要注意。#include int main(void){ double p,x,h,u,d,f,temp,down; int day;原创 2013-02-24 16:52:44 · 276 阅读 · 0 评论 -
UVa OJ 107
1、这道题交上去后一直TLE,第一次发现是没有考虑到1 1的情况,第二次发现没有考虑n可行而n+1不可行的情况,这时加一个else x++就对了。2、注意浮点运算的误差,适当时候要四舍五入。浮点数不能直接比较是否相等,要根据差与1e-9的大小来判断。#include #include int main(void){ int a,b,n,sum,x,i,power;原创 2013-02-24 15:21:22 · 327 阅读 · 0 评论 -
UVa OJ 591
1、彻底无语了,跟以前做过的一道题搞混了,WA了3次。那道题要求输出移动次数。本题要求输出移动砖块数。2、输出中句号很容易忘记,要注意。#include #include int main(void){ int n,i,count=0; int a[60]={0}; while(scanf("%d",&n)==1) {原创 2013-02-23 23:40:11 · 303 阅读 · 0 评论 -
UVa OJ 10025
1、这道题WA疯了,原来是因为计算8*n的时候溢出了(n最大可达1000000000)。所以单独转换为double型即可。2、当题目给出的数字很大时,不但要注意数字本身是否会溢出,还要顾及中间计算过程中是否溢出!#include #include int main(void){ int num,k,sum,n; double temp; scanf原创 2013-02-23 22:34:43 · 324 阅读 · 0 评论 -
UVa OJ 253
1、枚举即可,注意TRUE不要写成TURE了。#include #include int main(void){ char s[15]=""; int i,j; int c[24][6]={{1,2,3,4,5,6},{1,4,2,5,3,6},{1,5,4,3,2,6},{1,3,5,2,4,6},原创 2013-02-23 13:09:02 · 266 阅读 · 0 评论 -
UVa OJ 10970
1、唉,好水的题~#include int main(void){ int m,n; while(scanf("%d%d",&m,&n)==2) { printf("%d\n",n*m-1); } return 0;}原创 2013-02-26 17:16:17 · 289 阅读 · 0 评论