先说下今天的感受:
1. 题目做多了,人会变傻啊!
2. 迷乱的时候,模拟步骤来(农大1323)
3. 出错时千万别呆看,调试下现原形(农大1338)
题目链接:点击我打开题目哈
就是因为定义数组的时候太小家子气了,结果数组越界。c语言的数组越界不会像java一样会提示,最后浪费了自己一个早上在那边琢磨。到最后怀疑到全局变量的数组默认初始化是否为零的问题上,真的是无语啊!
在定义p数组的时候也考虑过越界问题,不够自己打印 p[j] 出来发现没有问题,最后还是W君打印 j 的值才明白,真的很佩服 W 君的能力。这次也发现了自己的问题所在,就是遇到出错的时候没想到直接去调试,而是呆在那边乱想。不调试而想找出 bug 真的是痴心妄想。不用调试找 bug 真的是“旷安宅而弗居,舍正路而不由,呜呼哀哉”。
#include<iostream> #include<cmath> using namespace std; int p[1250]; int main() { int m; int cou[10001]={0}; int i, j, n, flag; n = 3; p[0] = 2; j = 0; while(n <= 10000){ flag = 1; for(i=2; i<=sqrt(n); i++){ if(n % i == 0){ flag = 0; break; } } if(flag){ //cout << p[j] << " "; p[++j] = n; } n += 2; } int f, s, x; for(i=0; i<1250; i++){ for(j=i; j<1250; j++){ s = 0; f = 0; for(x=i; x<=j; x++){ s += p[x]; if(s >= 10000){ s -= p[x]; f = 1; break; } } if(f == 0){ //cout << s << " "; cou[s]++; } } } while(cin >> m) { if(m == 0) break; cout << cou[m] << endl; } return 0; }
题目链接:点击我打开题目
题目本身不难,初中高中就接触过了,但是做这种题目竟然会慌张,说多了都是泪啊!这题算是十足的水题了,但是还是学到不少的东西。这题目做完给我的感受是:当迷乱的时候,模拟步骤来。题目做多了人真的会变傻啊,数学思维才是最重要的。数学是自然科学,计算机是人造科学。
#include<iostream> using namespace std; int main() { long m, k, n, t; while(cin >> m >> k) { t = m; if(m==0 && k==0) break; while(m >= k){ n = m / k; m = m - n * k + n; t += n; } cout << t << endl; } return 0; }
该说下今天所讲的博弈论了~~~今天讲的人没效率,听的人也没精神。弄好网址自己再好好琢磨吧。
介绍博弈论比较详细,比较好的论文的链接:
http://www.wutianqi.com/?p=1081
http://www.cnitblog.com/weiweibbs/articles/42735.html
http://qing.blog.sina.com.cn/tj/7ebd053433000viz.html