为了向大神看齐,遂响应号召,每天刷一下POJ上面的水题,每天学习一点ACM,做一点ACM题目。
我相信积少成多,更相信,开头是艰难的,但是一旦走进去,就会别有一番感受,速度也会加快吧。
so ,today is the first day .
POJ 1003 (传送门:http://poj.org/problem?id=1003)
题目描述:
Description
How far can you make a stack of cards overhang a table? If you have one card, you can create a maximum overhang of half a card length. (We're assuming that the cards must be perpendicular to the table.) With two cards you can make the top card overhang the bottom one by half a card length, and the bottom one overhang the table by a third of a card length, for a total maximum overhang of 1/2 + 1/3 = 5/6 card lengths. In general you can make n cards overhang by 1/2 + 1/3 + 1/4 + ... + 1/(n + 1) card lengths, where the top card overhangs the second by 1/2, the second overhangs tha third by 1/3, the third overhangs the fourth by 1/4, etc., and the bottom card overhangs the table by 1/(n + 1). This is illustrated in the figure below.
Input
Output
找所有的(n, k), 满足: 1+2+..+(n-1)=(n+1)+(n+2)…+k 。输出按k排序的前6个。
/***** 简单ACM水题 ********/ /******** written by C_Shit_Hu ************/ ////////////////POJ 1003/////////////// /****************************************************************************/ /* 求平均数。 */ /****************************************************************************/ #include <iostream> using namespace std; int main() { int i; float len,s; while(cin >> len && len != 0.00) { s = 0.0; for(i = 2; ; i++) { s+=1.0/i; if(s >= len) break; } cout << i-1 <<" card(s)" << endl; } return 0; }
/***** 简单ACM水题 ********/ /******** written by C_Shit_Hu ************/ /////////////////////////////// /****************************************************************************/ /* 找所有的(n, k), 满足: 1+2+..+(n-1)=(n+1)+(n+2)…+k 输出按k排序的前10个 */ /****************************************************************************/ #include <iostream> #include <cmath> using namespace std; bool sing(int j) { long int k, n; double m; k = j * j; n = k*(k+1) / 2; m = sqrt(n); if ( floor(m + 0.5) == m) { // printf("n = %d, k = %d\n", m, k); cout << m << " " << k << endl; return true; } else return false; } bool doub(int j) { long int k, n; double m; k = 2 * j * j; n = k*(k+1) / 2; m = sqrt(n); if ( floor(m + 0.5) == m) { cout << m << " " << k << endl; return true; } else return false; } int main( ) { // freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); int i, j; for (i=1,j=1; i< 7 ; j++) { if(sing(j)) i ++ ; if(doub(j)) i ++ ; } return 0; } /******************************************************/ /******************** 心得体会 **********************/ /* */ /******************************************************/