[全民编程]76道高难度C++练习题.含NOI竞赛题.欢迎挑战
<P>偶然从朋友那里搞到的, 名字是<<C++入门题>><br>题目都相当的经典. 还有不少是NOI的考试题.<br>1 - 20题作为热身(见2楼), 越往后越难, 完整版(76道)请到1楼楼底下载.<br></P><P><FONT color=blue>[quote]请解决问题后, 不要吝惜你的才华, 把解题方法跟贴, 大家共同学习提高.</FONT><FONT color=blue>[/quote]</FONT></P>
<P>统计时间: 2007-10-10 19:29[/quote]<br>[quote]<FONT color=red>目前已完成题目</FONT><FONT color=#000000>(按发帖时间先后排序)</FONT></P>
<P>题号 完成人 楼层<br>---------------------------------------------<br>2 百年不亮 3<br>5 HCL 4 <br>20 aipb2007 5,6 <br>17 游乐园/aipb2007 18/20 <br>6 HCL 26,27 <br>16 jiaju111 33 <FONT color=red>讨论完成, 未编程</FONT><br>11 aipb2007 46 <br>75 HJin 48 <FONT color=red>不符题干, 参考</FONT><br><FONT color=#000000>49 HJin 49 <br>48 HJin 61 <br>10 HJin 62 * 218楼(blueboy82006),236楼(远去的列车)修改<br></FONT>13 HJin 63 <br>17 HJin 65 <br>1 HJin 67 <br>3 tianma8778 69 [color=red]有缺陷, 供参考[/color]<br>24 HJin 71 <br>1 kai 77 另一种解法<br>2 kai 79 数字电路分析法<br>4 HJin 80 <br>3 kai 81 # With analysis<br>19 HJin 83 <br>3 laigaoat2005 69 <br>37 HJin 103 162楼补充说明(smartwind)<br>67 HJin 104 <br>74 HJin 105 <br>4 wfpb 107 * + (kai指出, 见117楼)<br>3 smartwind 108 *<br>9 smartwind 109 *<br>8 wfpb 110 *<br>3 zkkpkk 111 *<br>12 wfpb 112 *<br>75 smartwind 113 *<br>37 weishj 114 *<br>41 zkkpkk 115 * 166楼改进(smartwind)<br>6 zkkpkk 118 * 130楼补充蛇形填数<br>65 weishj 124 *<br>14 huozoo 126 @ 正确<br>7 zkkpkk 137 *<br>76 HJin 138 *<br>4 天空の城 140 *<br>58 HJin 141 *<br>9 zkkpkk 142 *<br>13 zkkpkk 144 *<br>57 HJin 147 *<br>53 HJin 148 *<br>22 HJin 149 *<br>43 zkkpkk 150 *<br>21 HJin 152 *<br>31 smartwind 160 * 164楼补充(HJin) 165楼补充(smartwind)<br>34 smartwind 161 # 分析<br>45 smartwind 172 *<br>2 zhchchqihu 194,193 * 2种方法<br>3 freshman42 196 *<br>? blueboy82006 208 *<br>2 卧龙孔明 209,210 * 2种方法<br>1 hkice 211 *<br>5 hkice 212 *<br>3 miaomiao0403 214 *<br>10 ml232528 215 * 指出62楼10题错误<br>55 远去的列车 220 *<br>48 远去的列车 222 *<br>14 huozoo 223 * 解答者本人不确定<br>2,3 xjlsgcjdtc 228,229 *<br>3 qq598369 230 *<br>3 远去的列车 232 *<br>3 曦木 233 *<br>6 远去的列车 234 *<br>7 海子星竹 239 *<br>3 且行且珍惜 240 *<br>[/quote]<br>[quote]注:<br>* 未测试 (Not tested)<br>@ 已测试 (Tested)<br>+ Bug<br># 无源代码 (No code)<br>[/quote]<br>[quote]完整版(76道)下载[attach]22592[/attach][/quote]</P><br>
[align=right][color=#000066][此贴子已经被作者于2007-10-10 19:29:50编辑过][/color][/align]
<P> ───────</P>
<P> X Y Z D E</P>
<P> 2. A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些<br> 人参加了竞赛:</P>
<P> (1)A参加时,B也参加;</P>
<P> (2)B和C只有一个人参加;</P>
<P> (3)C和D或者都参加,或者都不参加;</P>
<P> (4)D和E中至少有一个人参加;</P>
<P> (5)如果E参加,那么A和D也都参加。</P>
<P> 3. 打印一个 N*N 的方阵,N为每边 N=15 打印出下面图形<br>字符的个数(3<N<20), 要求最 TTTTTTTTTTTTTTT<br>外一层为"T", 第二层为"J", 从第三层 TJJJJJJJJJJJJJT<br>起每层依次打印数字 1,2,3,... TJ11111111111JT<br>(右图以N为15为例) TJ12222222221JT<br> TJ12333333321JT<br> TJ12344444321JT<br> TJ12345554321JT<br> TJ12345654321JT<br> TJ12345554321JT<br> TJ12344444321JT<br> TJ12333333321JT<br> TJ12222222221JT<br> TJ11111111111JT<br> TJJJJJJJJJJJJJT<br> TTTTTTTTTTTTTTT</P>
<P> 4. 在N行N列的数阵中, 数K(1〈=K〈=N)在每行和每列中出现且仅<br> 出现一次,这样的数阵叫N阶拉丁方阵。例如下图就是一个五阶拉丁方阵。<br> 编一程序,从键盘输入N值后,打印出所有不同的N阶拉丁方阵,并统计个数。</P>
<P> 1 2 3 4 5<br> 2 3 4 5 1<br> 3 4 5 1 2<br> 4 5 1 2 3<br> 5 1 2 3 4</P>
<P><br> 5. 输入一个十进数,将其转换成 N 进制数(0<N<=16)。<br> 6. 矩阵中填数. 当给出 N*N 的矩阵,要求用程序填入下列形式的数:</P>
<P> ① 倒填,例如N=5 ② 蛇形填数 ③ 回转填数</P>
<P>┌─┬─┬─┬─┬─┐ ┌─┬─┬─┬─┬─┐ ┌─┬─┬─┬─┬─┐<br>│25│24│23│22│21│ │ 1│ 3│ 4│10│11│ │ 1│16│15│14│13│<br>├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤<br>│20│19│18│17│16│ │ 2│ 5│ 9│12│19│ │ 2│17│24│23│12│<br>├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤<br>│15│14│13│12│11│ │ 6│ 8│13│18│20│ │ 3│18│25│22│11│<br>├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤<br>│10│ 9│ 8│ 7│ 6│ │ 7│14│17│21│24│ │ 4│19│20│21│10│<br>├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤<br>│ 5│ 4│ 3│ 2│ 1│ │15│16│22│23│25│ │ 5│ 6│ 7│ 8│ 9│<br>└─┴─┴─┴─┴─┘ └─┴─┴─┴─┴─┘ └─┴─┴─┴─┴─┘</P>
<P><br> 7. 读入一行文本,包含若干个单词(以空格间隔,%结尾)。将其中以 A 开头的<br> 单词与以 N 结尾的单词,用头尾交换的办法予以置换。</P>
<P> 8. 输入两个正整数X,Y,将X,Y化为二进制数,然后将这两个二进制数作二进<br> 制加法运算,再将结果化为十进制数输出。</P>
<P> 9. 四人玩火柴棍游戏,每一次都是三个人赢,一个人输。输的人要按赢者手中的火柴<br> 数进行赔偿,即赢者手中有多少根火柴棍,输者就赔偿多少根。现知道玩过四次后,<br> 每人恰好输过一次, 而且每人手中都正好有16根火柴。问此四人做游戏前手中各有<br> 多少根火柴? 编程解决此问题。</P>
<P>10. 如图1所示,编写程序计算 ┎┰┰┰┰┰┰┰┰┰┒<br> 大大小小正方形共有多少?当最小 ┠╂╂╂╂╂╂╂╂╂┨<br> 正方行边长为1时,它们的总面积 ┠╂╂╂╂╂╂╂╂╂┨<br> 共为多少? ┠╂╂╂╂╂╂╂╂╂┨<br> ┠╂╂╂╂╂╂╂╂╂┨<br> ┠╂╂╂╂╂╂╂╂╂┨<br> ┠╂╂╂╂╂╂╂╂╂┨<br> ┠╂╂╂╂╂╂╂╂╂┨<br> ┠╂╂╂╂╂╂╂╂╂┨<br> ┠╂╂╂╂╂╂╂╂╂┨<br> ┖┸┸┸┸┸┸┸┸┸┚<br> 11. 巧排数字。将1、2、...、20这20个数排成一排,使得相邻的两个数之<br> 和为一个素数,且首尾两数字之和也为一个素数。编程打印出所有的排法。</P>
<P>12. 下图是一个集装箱仓库,阴影部分表示有集装箱存放不能通过,无阴影处为临时通<br>道。当有人要从入口处到达出口处时,必须寻找可通过路线,请你找出可完成这个过程<br>的最方便(即用最短路线)到达出口处的路径。</P>
<P> ┎┰┰┰入口┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┒<br> ┠╂╂╂──╂╂╂╂┸┸╂┸┸╂┸┸╂┸┸╂╂╂╂┸┸╂╂╂┨<br> ┠╂╂╂──╂┸┸╂──╂┰┰╂┰┰╂──╂╂╂╂──╂╂╂┨<br> ┠╂╂╂──╂┰┰╂┰┰╂╂╂╂╂╂╂──╂┸┸╂──╂╂╂┨<br> ┠╂╂╂──╂╂╂╂╂╂╂╂╂╂╂╂╂┰┰╂┰┰╂┰┰╂╂╂┨<br> ┠╂╂╂──╂┸┸╂┸┸╂┸┸╂┸┸╂┸┸╂┸┸╂┸┸╂╂╂┨<br> ┠╂╂╂──╂┰┰╂┰┰╂┰┰╂──╂┰┰╂──╂┰┰╂╂╂┨<br> ┠╂╂╂──╂╂╂╂╂╂╂╂╂╂──╂╂╂╂──╂╂╂╂╂╂┨<br> ┠╂╂╂──╂╂╂╂┸┸╂┸┸╂──╂╂╂╂──╂┸┸╂╂╂┨<br> ┠╂╂╂──╂╂╂╂┰┰╂┰┰╂┰┰╂╂╂╂┰┰╂──╂╂╂┨<br> ┖┸┸┸──┸┸┸┸┸┸┸┸┸┸┸┸┸┸┸┸┸┸┸出口┸┸┸┚</P>
<P><br>13. 有N个硬币(N为偶数)正面朝上排成一排,每次将 N-1 个硬币翻过来放在原位<br>置, 不断地重复上述过程,直到最后全部硬币翻成反面朝上为止。编程让计算机把<br>翻币的最简过程及翻币次数打印出来(用*代表正面,O 代表反面)。</P>
<P>14. 有黑白棋子各有N个(分别用*和O代替),按下图方式排列</P>
<P> ***...***OOO...OOO</P>
<P> N个黑棋 N个白棋</P>
<P>允许将相邻两个棋子互换位置,最后使队形成黑白交替排列,试编程实现该操作。</P>
<P>15. 已知6个城市,用c[i,j]表示从i城市到城市j是否有单向的直达汽车</P>
<P>(1=<i〈=6,1〈=j〈=6), c[i,j]=1 表示城市i到城市j有单向直达汽<br>车; 否则 c[i,j]=0. 试编制程序,对于给出的城市代号i,打印出从该城市出<br>发乘车(包括转车)可以到达的所有城市。<br>16. 设有8枚硬币a,b,c,d,e,f,g,h,其中有一枚硬币是伪造的。<br>真伪硬币的区别仅是重量不同,可能重,可能轻。今要求以天平为工具,用最少的<br>比较次数挑出伪造硬币,并鉴定它是重还是轻。</P>
<P>17. 编写一个程序,当输入不超过60个字符组成的英文文字时,计算机将这个句子<br>中的字母按英文字典字母顺序重新排列,排列后的单词的长度要与原始句子中的长度<br>相同。例如:</P>
<P> 输入:</P>
<P> THE PRICE OFBREAD IS ¥1 25 PER POUND</P>
<P> 输出:</P>
<P> ABC DDEEE EFHIINO OP ¥1 25 PPR RRSTU</P>
<P>并且要求只对A到Z的字母重新排列,其它字符保持原来的状态。</P>
<P>18. 在一线性七个格位置的图上有两种不同颜色的棋子A,B. 排列如下图所示,中间<br>格的位置为空。</P>
<P> ┎─┰─┰─┰─┰─┰─┰─┒<br> ┃A┃A┃A┃ ┃B┃B┃B┃<br> ┖─┸─┸─┸─┸─┸─┸─┚</P>
<P>要求将A,B的现行位置交换,形成下图中的排列:</P>
<P> ┎─┰─┰─┰─┰─┰─┰─┒<br> ┃B┃B┃B┃ ┃A┃A┃A┃<br> ┖─┸─┸─┸─┸─┸─┸─┚</P>
<P>移动棋子的条件:</P>
<P> (1) 每个格中只准放一个棋子。<br> (2) 任意一个棋子均可移动一格放入空格内。<br> (3) 一方的棋子均可跳过另一方的一个棋子进入空格。<br> (4) 任何棋子不得跳跃两个或两个以上棋子(无论颜色同异)<br> (5) 任何一个颜色棋子只能向前跳,不准向后跳。</P>
<P>编程完成有关的移动,并且完成具有2N+1个格子的情形. 其中两种颜色各有<br>N个棋子,且中间为空格.</P>
<P>19. (背包问题) 有 N 件物品 d1,......dN,每件物品重量为 W1,..., WN<br>(Wi > 0), 每件物品价值为 V1,......VN (Vi>0)。用这N件物品的某个子集<br>填空背包,使得所取物品的总重量<=TOTAL,并设法使得背包中物品的价值尽可<br>能高。</P>
<P>20. (N皇后) 在国际象棋的棋盘上放置N个皇后,使其不能互相攻击,即任意<br>两个皇后不能处在棋盘的同一行,同一列,同一斜线上,试问共有多少种摆法?<br>21. 请设计一个程序,由计算机把1.. ̄.8的八个自然数填入图中,使得横、<br>竖、对角任何两个相邻的小方格中的两个数是不连续的。(下图右侧的 4 个图<br>为禁止的情形).</P>
<P> ┌─┐ ┌─┐ ┌─┐<br> │ │ │4│ │8│<br> ┌─┼─┼─┐ └─┼─┐ ┌─┼─┘<br> │ │ │ │ │5│ │7│<br> ├─┼─┼─┤ └─┘ └─┘<br> │ │ │ │ ┌─┐<br> └─┼─┼─┘ │6│ ┌─┬─┐<br> │ │ ├─┤ │1│2│<br> └─┘ │7│ └─┴─┘<br> └─┘</P>
<P>[/quote]</P><br>
[align=right][color=#000066][此贴子已经被作者于2007-6-16 16:32:25编辑过][/color][/align]
<P>将百年兄对第2题的解答搬到这里来<BR>[quote]2. A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些<BR> 人参加了竞赛:</P>
<P> (1)A参加时,B也参加;</P>
<P> (2)B和C只有一个人参加;</P>
<P> (3)C和D或者都参加,或者都不参加;</P>
<P> (4)D和E中至少有一个人参加;</P>
<P> (5)如果E参加,那么A和D也都参加。</P>
<P>___________________________________________________________________</P>
<P>答案:</P>
<P>#include<stdio.h><BR>int main()<BR>{<BR>char name[]={'A','B','C','D','E'};<BR>int i,value[5];</P>
<P>for(value[0]=0;value[0]<2;value[0]++)<BR> for(value[1]=0;value[1]<2;value[1]++)<BR> for(value[2]=0;value[2]<2;value[2]++)<BR> for(value[3]=0;value[3]<2;value[3]++)<BR> for(value[4]=0;value[4]<2;value[4]++)<BR> {<BR> if((value[1]>=value[0])<BR> &&(value[1]+value[2]==1)<BR> &&value[2]==value[3]<BR> &&(value[3]+value[4])<BR> &&(!value[4]||(value[4]&&value[0]&&value[3])))<BR> for(i=0;i<5;i++)<BR> if(value[i])<BR> printf("%c参加\t",name[i]);<BR> else<BR> printf("%c不参加\t",name[i]);<BR> }<BR>return 0; </P>
<P>}</P>
<P>结果:</P>
<P>A不参加 B不参加 C参加 D参加 E不参加 <BR>[/quote]</P> <P>#include <iostream><BR>#include <stack></P>
<P>using namespace std;</P>
<P>int main()<BR>{<BR> char digit[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};<BR> <BR> cout <<"输入待转换整数: ";<BR> int number;<BR> cin >>number;<BR> cout <<endl;</P>
<P> cout <<"转换成多少进制? ";<BR> int base;<BR> cin >>base;<BR> cout <<endl;</P>
<P> stack<char> stk;<BR> char remain;<BR> while (number!=0)<BR> {<BR> remain = digit[number%base];<BR> stk.push(remain);<BR> number /= base; <BR> }<BR> <BR> cout <<"结果: ";<BR> while(!stk.empty())<BR> {<BR> cout <<stk.top();<BR> stk.pop();<BR> }<BR> cout <<endl;<BR> return 0;<BR>}<BR><BR><BR>第五题的,望指点![em02]</P> <P>辛苦了,我也冒个泡:<br>N皇后:<br><br>版本1:<br><br>[CODE]<br>//file : queens.h<br>#ifndef QUEENS_H<br>#define QUEENS_H<br>const int max_size = 24;<br>class queens{<br>public:<br> //constructor<br> queens(int size);<br> <br> //main function<br> void solution(); //recursive function for backtracking<br> //times of solutions<br> static unsigned int times_of_solution;<br>protected:<br> //member functions<br> void print() const; //print the solution<br> void insert(int col); //add a queen the posn<br> void remove(int col); //delete a queen at row-1<br> bool isSolved() const; //return true if all queens at right posn<br> bool isUnguarded(int col) const; //return true if the posn is guarded by a queen<br>private:<br> //data members<br> int row;<br> int board_size; <br> bool chessboard[max_size][max_size];<br>};<br>#endif[/CODE]</P>
<P>[CODE]<br>//file : queens.cpp<br>#include "queens.h"<br>#include <iostream><br>queens::queens(int size){<br> board_size = size;<br> row = 0; //no queen on chess board<br> for (int i = 0;i < board_size;++i)<br> for (int j =0;j < board_size;++j)<br> chessboard[i][j] = false;<br>}<br>bool queens::isSolved() const{<br> return row == board_size;<br>}<br>bool queens::isUnguarded(int col) const{<br> bool isOk = true;<br> //at current column <br> for (int i = 0;isOk && i < row;++i)<br> isOk = !chessboard[i][col];<br> //at left upper diagonal<br> for (int i = 1;isOk && row-i >= 0 && col-i >= 0;++i)<br> isOk = !chessboard[row-i][col-i];<br> //at right upper diagonal<br> for (int i = 1;isOk && row-i >= 0 && col+i < board_size;++i)<br> isOk = !chessboard[row-i][col+i];<br> return isOk;<br>}<br>void queens::insert(int col){<br> chessboard[row++][col] = true;<br>}<br>void queens::remove(int col){<br> chessboard[--row][col] = false;<br>}<br>void queens::print() const{<br> for (int i = 0;i < board_size;++i){<br> for (int j = 0;j < board_size;++j)<br> std::cout << chessboard[i][j] << " ";<br> std::cout << std::endl;<br> }<br> ++times_of_solution;<br> std::cout << "**************************************" << std::endl;<br>}<br>void queens::solution(){<br> if (isSolved())<br> print();<br> else<br> for (int col = 0;col < board_size;++col)<br> if (isUnguarded(col)){<br> insert(col);<br> //for backtracking<br> solution();<br> remove(col);<br> }<br>}[/CODE]</P>
<P><br> </P>
<DIV class=htmlcode>
<P>//file : main.cpp<br>#include "queens.h"<br>#include <iostream><br>#include <ctime><br>using namespace std;</P>
<P>unsigned int queens::times_of_solution = 0;<br>int main(){<br> int size;<br> cin >> size;<br> while (size < 1 || size > max_size){<br> cout << "the queen must between 1 ------ " << max_size << endl;<br> cin >> size;<br> }<br> queens puzzle(size);</P>
<P> ////////////////////////////////////////////<br> clock_t start,finish;<br> start = clock();<br> ////////////////////////////////////////////</P>
<P> puzzle.solution();<br> cout << "number of solutions ------ " << queens::times_of_solution << endl;</P>
<P> ////////////////////////////////////////////<br> finish = clock();<br> double time = (double) (finish - start) / CLOCKS_PER_SEC;<br> cout << "time used ------ " << time << endl;<br> ////////////////////////////////////////////<br>}</P></DIV>
[align=right][color=#000066][此贴子已经被作者于2007-6-16 13:12:08编辑过][/color][/align]
<P>版本2 : 无迭代改进版本:<br><br><br>[CODE]<br>//file : queens.h<br>#pragma once<br>const int max_board_size = 24;<br>class queens{<br>public:<br> //constructor<br> queens(int size);<br> <br> //main function<br> void solution(); //recursive function for backtracking<br> //times of solutions<br> static unsigned int times_of_solution;<br>protected:<br> //member functions<br> void print() const; //print the solution<br> void insert(int col); //add a queen the posn<br> void remove(int col); //delete a queen at row-1<br> bool isSolved() const; //return true if all queens at right posn<br> bool isUnguarded(int col) const; //return true if the posn is guarded by a queen<br>private:<br> //make bool array for the chessboard<br> bool col_free[max_board_size];<br> bool upward_free[2*(max_board_size-1)];<br> bool downward_free[2*(max_board_size-1)];<br> int queen_in_rows[max_board_size]; //store the column of queens at each row<br> //data members<br> int row;<br> int board_size; <br>};[/CODE]<br><br>[CODE]<br>//file : queens.cpp<br>#include "queens.h"<br>#include <iostream><br>queens::queens(int size){<br> board_size = size;<br> row = 0;<br> //set all columns free<br> for (int i = 0;i < board_size;++i)<br> col_free[i] = true;<br> //set all upward diagonals free<br> for (int i = 0;i < 2*(board_size-1);++i)<br> upward_free[i] = true;<br> //set all downward diagonals free<br> for (int i = 0;i < 2*(board_size-1);++i)<br> downward_free[i] = true;<br>}<br>bool queens::isSolved() const{<br> return row == board_size;<br>}<br>bool queens::isUnguarded(int col) const{<br> return col_free[col] && upward_free[row+col]<br> && downward_free[row-col+board_size-1];<br>}<br>void queens::insert(int col){<br> queen_in_rows[row] = col;<br> //set the column & diagonal which is guarded by queen to false<br> col_free[col] = false;<br> upward_free[row+col] = false;<br> downward_free[row-col+board_size-1] = false;<br> ++row;<br>}<br>void queens::remove(int col){<br> //remove a queen at previous row<br> --row; //back to previous row<br> //set the column & diagonal which is guarded by queen to true<br> col_free[col] = true;<br> upward_free[row+col] = true;<br> downward_free[row-col+board_size-1] = true;<br>}<br>void queens::print() const{<br> for (int i = 0;i < board_size;++i){<br> for (int j = 0;j < board_size;++j)<br> std::cout << (j == queen_in_rows[i] ? "1 " : "0 ");<br> std::cout << std::endl;<br> }<br> std::cout << "---------------------------------" << std::endl;<br> ++times_of_solution;<br>}<br>void queens::solution(){<br> if (isSolved())<br> print();<br> else<br> for (int col = 0;col < board_size;++col)<br> if (isUnguarded(col)){<br> insert(col);<br> //the steps for backtracking<br> solution();<br> remove(col);<br> }<br>}[/CODE]</P>
<P><br></P>
<DIV class=htmlcode>
<P>//file : main.cpp<br>#include "queens.h"<br>#include <iostream><br>#include <ctime><br>using namespace std;</P>
<P>unsigned int queens::times_of_solution = 0;<br>int main(){<br> int size;<br> cin >> size;<br> while (size < 4 || size > max_board_size){<br> cout << "the queen must between 4 ------ " << max_board_size << endl;<br> cin >> size;<br> }<br> queens puzzle(size);</P>
<P> ////////////////////////////////////////////<br> clock_t start,finish;<br> start = clock();<br> ////////////////////////////////////////////</P>
<P> puzzle.solution();<br> cout << "number of solutions ------ " << queens::times_of_solution << endl;</P>
<P> ////////////////////////////////////////////<br> finish = clock();<br> double time = (double) (finish - start) / CLOCKS_PER_SEC;<br> cout << "time used ------ " << time << endl;<br> ////////////////////////////////////////////<br>}</P></DIV>
<P><br></P>
[align=right][color=#000066][此贴子已经被作者于2007-6-16 13:10:49编辑过][/color][/align]
仔细研究中 <DIV class=quote><B>以下是引用<U>HCL</U>在2007-6-16 13:00:49的发言:</B><br>
<P>#include <iostream><br></P>
<P>...第五题的,望指点![em02]</P></DIV>
<P>第五题用堆栈的话就有些限制了吧? 遇到堆栈很小的情况.<br>如果要考虑负数的话就更难了..象2,8,16等进制都是用补码表示的...啊..好难啊...[em11]</P>
[align=right][color=#000066][此贴子已经被作者于2007-6-16 14:27:53编辑过][/color][/align]
<P>第2题分析:</P>
<P>首先要设置逻辑变量。value[i]==1时表示第i(i=0~4依次表示A,B,C,D,E五人)个人参加,为0则不参加。</P>
<P>然后写出逻辑函数。将下面的逻辑关系写成函数形式:<BR> (1)A参加时,B也参加;value[1]>=value[0]<BR> (2)B和C只有一个人参加;value[1]+value[2]==1<BR> (3)C和D或者都参加,或者都不参加;value[2]==value[3]<BR> (4)D和E中至少有一个人参加;(value[3]+value[4])<BR> (5)如果E参加,那么A和D也都参加。(!value[4]||(value[4]&&value[0]&&value[3]))<BR>表示为Y=(value[1]>=value[0])&&(value[1]+value[2]==1)&&value[2]==value[3]&&(value[3]+value[4])&&(!value[4]||(value[4]&&value[0]&&value[3])))</P>
<P>最后穷举法把所有的组合算出来,将Y==1时的情况输出。<BR></P> 哦, 谢谢百年兄指点! 晕,不会C啊,Java编的行不? 请问一下,你们编C都用的什么编译器啊?方便的话,可以传我一个么? 我用TC++, 至于用Java行不行... 没人规定这个C++练习就必须用C++...(^^!)<br>主要目的是练习编程技巧, 当然要选用自己擅长的语言咯..<br>何况习题里面好多NOI的题, NOI可是PASCAL的天下啊... 呵呵,那我就献献丑啦! <P>学JAVA肯定用过EC的了,那个现在可以编译C++程序的啊,加个支持的插件就行了。</P>
[align=right][color=#000066][此贴子已经被作者于2007-6-16 19:29:48编辑过][/color][/align]
第4楼的程序我怎么不能 编译<BR>用turbo c 显示有很多错误 <DIV class=quote><B>以下是引用<U>ggrrrman66</U>在2007-6-16 19:30:50的发言:</B><BR>第4楼的程序我怎么不能 编译<BR>用turbo c 显示有很多错误</DIV>
<P>第4楼的程序可以运行... VC++ .NET 2005下编译OK<BR>关键是...那个是C++写的, 老大, 拿TC当然有错了.<BR>你可以用TC++3.0编译看看</P> <P>很久没来了,现在C++板块弄的蛮不错的...大家继续加油. 路过顺便挑个简单的做做 呵呵 <BR><BR><FONT color=#ff0000>-----------------------------------------------------------------------------------------------------</FONT><BR>17. 编写一个程序,当输入不超过60个字符组成的英文文字时,计算机将这个句子<BR>中的字母按英文字典字母顺序重新排列,排列后的单词的长度要与原始句子中的长度<BR>相同。例如:</P>
<P> 输入:</P>
<P> THE PRICE OFBREAD IS ¥1 25 PER POUND</P>
<P> 输出:</P>
<P> ABC DDEEE EFHIINO OP ¥1 25 PPR RRSTU</P>
<P>并且要求只对A到Z的字母重新排列,其它字符保持原来的状态。<BR><BR><BR>[code]<BR>#include<iostream><BR>#include<string><BR>#include<cctype><BR>#include<algorithm><BR>using namespace std;</P>
<P>int main()<BR>{<BR> string str,s;<BR> int num[60]={0};<BR> int j=1;<BR> getline(cin,str);<BR> for(int i=0; i<str.size(); i++) //把字母字符存到s中<BR> {<BR> if(isalpha(str[i])) s+=str[i];<BR> else <BR> {<BR> num[j++]=i; //记录非字母字符的位置<BR> num[0]++; //记录非字母字符的个数<BR> }<BR> }</P>
<P> sort(s.begin(),s.end()); //排序A~Z或a~z</P>
<P> if(s.size()!=str.size())<BR> for(j=1; j<=num[0]; ++j) <BR> s.insert(num[j],str.substr(num[j],1)); //调整字符串</P>
<P> cout<<endl<<s<<endl;</P>
<P> return 0;<BR>}<BR>[/code]</P> <DIV class=quote><B>以下是引用<U>游乐园</U>在2007-6-17 9:20:18的发言:</B><BR>
<P>很久没来了,现在C++板块弄的蛮不错的...大家继续加油. 路过顺便挑个简单的做做 呵呵 <BR><BR><FONT color=#ff0000>-------------------------------------------------------------------------------------------------</FONT></P></DIV>
<P>游乐园大哥,很久不来在做什么?呵呵~难得看到你啊!多来耍哈嘛![em02]</P> <DIV class=htmlcode>#include <iostream><br>#include <string><br>#include <algorithm><br>using namespace std;<br><br>int main(){<br> string input = "",letters = "";<br> char ch;<br> <br> while ((ch = getchar()) != '\n'){<br> if(isalpha(ch))<br> letters += ch;<br> input += ch;<br> }<br> sort(letters.begin(),letters.end());<br> <br> for (int i = 0,j = 0;i < input.size();++i){<br> if (!isalpha(input[i]))<br> cout << input[i];<br> else<br> cout << letters[j++];<br> }<br> system("pause");<br>}</DIV>也是17题!<br>嘿嘿[em01]
[align=right][color=#000066][此贴子已经被作者于2007-6-17 10:38:17编辑过][/color][/align]
