C趣味程序百例(24)小明买书
Cc++趣味程序百例(献给CC++初学者)

C/c++趣味程序百例(獻給C/C++初學者)1.繪製餘弦曲線2.繪製餘弦曲線和直線3.繪製圓4.歌星大獎賽5.求最大數6.高次方數的尾數7.階乘尾數零的個數8.借書方案知多少9.楊輝三角形10.數制轉換11.打魚還是曬網12.抓交通肇事犯13.該存多少錢14.怎樣存錢利最大15.捕魚和分魚16.出售金魚17.平分七筐魚18.有限5位數19.8除不盡的自然數20.一個奇異的三位數21.4位反序數22.求車速23.由兩個平方三位數獲得三個平方二位數24.阿姆斯特朗數25.完全數26.親密數27.自守數28.回文數29.求具有abcd=(ab+cd)2性質的四位數30.求素數31.歌德巴赫猜想32.可逆素數33.回文素數34.要發就發35.素數幻方36.百錢百雞問題37.愛因斯坦的數學題38.換分幣39.年齡幾何40.三色球問題41.馬克思手稿中的數學題42.最大公約數和最小公倍數43.分數比較44.分數之和45.將真分數分解為埃及分數46.列出真分數序列47.計算分數的精確值48.新娘和新郎49.委派任務50.誰在說謊51.誰是竊賊52.黑與白53.迷語博士的難題(1)54.迷語博士的難題(2)55.哪個大夫哪天值班56.區分旅客國籍57.誰家孩子跑最慢58.拉丁方陣59.填表格60.1~9分成1:2:3的三個3位數61.1~9組成三個3位的平方數62.由8個整數形成奇特的立方體63.減式還原64.乘式還原65.乘式還原(2)66.除式還原(1)67.除式還原(2)68.九位累進可除數69.魔術師的猜牌術(1)70.魔術師的猜牌術(2)71.約瑟夫問題72.郵票組合73.和數能表示1~23的5個正整數74.可稱1~40磅的4塊砝碼75.10個小孩分糖果76.小明買書77.波松瓦酒的分酒趣題78.求π的近似值79.求π的近似值(2)80.奇數平方的一個有趣性質81.角谷猜想82.四方定理83.卡布列克常數84.尼科徹斯定理85.回文數的形成86.自動發牌87.黑白子交換88.常勝將軍89.搶3090.搬山遊戲91.人機猜數遊戲92.人機猜數遊戲(2)93.漢諾塔94.兔子產子95.將阿拉伯數字轉換為羅馬數字96.選美比賽97.滿足特異條件的數列98.八皇后問題99.超長正整數的加法100.數字移動1.繪製餘弦曲線在屏幕上用「*」顯示0~360度的餘弦函數cos(x)曲線*問題分析與算法設計如果在程序中使用數組,這個問題十分簡單。
C语言趣味程序百例

C语言趣味程序百例(1):绘制余弦曲线public class test1{public static void main(String args[]){double y;double x, m;for (y=1;y>-1;y-=0.1) {m= Math.acos(y) * 10;for (x = 1; x < m; x++)System.out.print(" ");System.out.print("*");for (; x < 62 - m; x++)System.out.print(" ");System.out.println("*");}}}C语言趣味程序百例(3):绘制圆public class test3{public static void main(String args[]) {double y;double x, m;for(y=10;y>=-10;y--){m=2*Math.sqrt(100-y*y);for(x=1;x<30-m;x++)System.out.print(" ");System.out.print("*");for(;x<30+m;x++)System.out.print(" ");System.out.println("*");}}}import java.util.*;public class test4{public static void main(String args[]){int max=0;int min=100;double sum=0;for(int i=1;i<=10;i++){System.out.printf("请输入第"+i+"个分数:\n");Scanner reader=new Scanner(System.in);int x=reader.nextInt();sum+=x;if(x> max) max=x;if(x< min) min=x;}System.out.println("无效的最高分和最低分:"+max+" , "+min);System.out.println("最后选手的得分是:"+(sum-max-min)/8.0);}}public class test5{public static void main(String args[]){for (int i=999;i>99;i--) {if (555555%i==0) {System.out.println("最大约数="+i);return;}}}}C语言趣味程序百例(12):抓交通肇事犯public class test12{public static void main(String args[]){int k;for(int i=1;i<=9;i++){for(int j=0;j<=9;j++){if(i!=j){k=i*1000+i*100+j*10+j;for(int c=31;c< 100;c++){if(c*c==k)System.out.println("肇事车牌号是"+k);}}}}}}public class test38{public static void main(String args[]){int count = 0;for (int i = 0; i <= 100; i++)for (int j = 0; j <= 50; j++)for (int k = 0; k <= 20; k++) {if (i + j * 2 + k * 5 == 100) {System.out.println(count++ + ":" + i + "-" + j + "-" + k);}}}}public class test40{public static void main(String args[]){for (int i = 0; i <= 3; i++)for (int j = 0; j <= 3; j++) {if (8 - i - j <= 6)System.out.println("Res=" + i + " White=" + j + " Black="+ (8 - i - j));}}}C语言趣味程序百例(54):博士的难题2public class test54{public static void main(String args[]){for (int a = 1; a <= 3; a++)for (int b = 1; b <= 3; b++)for (int c = 1; c <= 3; c++)if ((a != b && b != c && a != c)&& (a == 1 && b == 1 || a == 2 && b != 1 || a == 3)&& (b == 1 && b == 3 || b == 2 && b != 3 || b == 3)&& (c == 1 && b == 2 || c == 2 && b != 2 || c == 3)) {System.out.println("1表示诚实族,2表示说谎族,3表示两面族");System.out.println("a=" + a);System.out.println("b=" + b);System.out.println("c=" + c);}}}C语言趣味程序百例(62):奇特立方体public class test62{public static void main(String args[]){int x[]=new int[8];for(int i=0;i<8;i++){x[i]=Integer.parseInt(args[i]);}new test62().cube62(x);}public void cube62(int x[]) {int n = 8;boolean success=false;for (int a = 0; a < n; a++)for (int b = 0; b < n; b++)for (int c = 0; c < n; c++)for (int d =0; d < n; d++)for (int e = 0; e < n; e++)for (int f = 0; f < n; f++)for (int g = 0; g < n; g++)for (int h =0; h < n; h++) {if (notEquls(new int[] { x[a],x[b], x[c],x[d],x[e],x[f],x[g],x[h]})) {if(cube62(x[a],x[b], x[c], x[d], x[e], x[f], x[g], x[h])) return;}}if(success!=true) System.out.println("不能构成奇妙立方体");;}public boolean cube62(int a, int b, int c, int d, int e, int f, int g, int h) {boolean success=false;int s = a + b + c + d;if (s == e + f + g + h)if (s == a + b + e + f)if (s == c + d + g + h)if (s == a + c + e + g)if (s == b + d + f + h) {System.out.println("能构成奇特立方体");System.out.print(" a=" + a);System.out.print(" b=" + b);System.out.print(" c=" + c);System.out.print(" d=" + d);System.out.print(" e=" + e);System.out.print(" f=" + f);System.out.print(" g=" + g);System.out.println(" h=" + h);System.out.println("构成的奇特立方体如下图:");System.out.println(" e/----------/f");System.out.println(" a/----------/b|");System.out.println(" | | | |");System.out.println(" | | | |");System.out.println(" | | | |");System.out.println(" |g/--------|-/h");System.out.println(" c/----------/d");return true;}return success;}public boolean notEquls(int[] a) {if (a == null || a.length == 0 || a.length == 1)return true;for (int i = 0; i < a.length; i++) {for (int j = 0; j < a.length; j++) {if (a[i] == a[j] && i != j) {return false;}}}return true;}}public class test49{public static void main(String args[]){for (int a = 0; a <= 1; a++)for (int b = 0; b <= 1; b++)for (int c = 0; c <= 1; c++)for (int d = 0; d <= 1; d++)for (int e = 0; e <= 1; e++)for (int f = 0; f <= 1; f++) {if (a + b >= 1&& a + d <= 1&& a + e + f == 2&& (b + c == 0 || b + c == 2)&& (c + d == 1)&& ((d == 0 && e == 0) || (d == 1 ))) {System.out.println("0是不去,1是去");System.out.println("a="+a);System.out.println("b="+b);System.out.println("c="+c);System.out.println("d="+d);System.out.println("e="+e);System.out.println("f="+f);}}}}import java.io.*;public class test10{public static void main(String[] args) throws IOException{BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("input int:");String s=br.readLine();int val=Integer.parseInt(s);System.out.println(getBits(val));}public static String getBits(int value){int displayMask=1<<31;StringBuffer buf=new StringBuffer(35);for(int c=1;c<=32;c++){buf.append((value & displayMask)==0? '0':'1');value<<=1;if(c%8==0)buf.append(' ');}return buf.toString();}}public class test9{public static void main(String args[]){int n=Integer.parseInt(args[0]);System.out.println("N="+n);for(int i=0;i<=n;i++){for(int j=0;j< 12-i;j++) System.out.printf(" ");for(int j=1;j< i+2;j++) System.out.printf("%6d",c(i,j));System.out.println();}}public static int c(int x,int y){int z;if((y==1)||(y==x+1)) return 1;z=c(x-1,y-1)+c(x-1,y);return z;}}C语言趣味程序百例(79):随机数求圆周率public class test79{public static void main(String args[]){double all=10000000;double l=1000000;double pai=0;double in=0;double x=0,y=0;for (int i=0;i<all;i++) {x=(Math.random()*l);y=(Math.random()*l);if(x*x+y*y<l*l)in++;}pai=(in/all*4);System.out.println("Times/All="+in+"/"+all+" "+"π~="+pai);}}。
c趣味编程100例(含答案)

}
*思考题
实现函数y=x2的图形与圆的图形叠加显示
4.歌星大奖赛
在歌星大奖赛中,有10个评委为参赛的选手打分,分数为1~100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。请编写一个程序实现。
*问题分析与算法实现
这个问题的算法十分简单,但是要注意在程序中判断最大、最小值的变量是如何赋值的。
44.分数之和 61
45.将真分数分解为埃及分数 63
46.列出真分数序列 65
47.计算分数的精确值 66
48.新娘和新郞 68
49.委派任务 70
50.谁在说谎 73
51.谁是窃贼 74
52.黑与白 76
53.迷语博士的难题(1) 79
54.迷语博士的难题(2) 81
55.哪个大夫哪天值班 84
87.黑白子交换 164
88.常胜将军 168
89.抢 30 169
90.搬山游戏 172
91.人机猜数游戏 176
92.人机猜数游戏(2) 179
93.汉诺塔 183
94.兎子产子 187
95.将阿拉伯数字转换为罗马数字 189
96.选美比赛 191
97.满足特异条件的数列 193
66.除式还原(1) 117
67.除式还原(2) 120
68.九位累进可除数 124
69.魔术师的猜牌术(1) 128
70.魔术师的猜牌术(2) 129
71.约瑟夫问题 131
72.邮票组合 134
73 和数能表示1~23的5个正整数 135
74.可称1~40磅的4块砝码 137
百钱买百鸡c语言编程题

"百钱买百鸡"是一个经典的数学问题,故事是这样的:公鸡5钱一只,母鸡3钱一只,小鸡1钱三只,现在要用100钱买100只鸡,问公鸡、母鸡、小鸡各多少只。
下面是一个使用C语言解决这个问题的示例代码:
c
#include <stdio.h>
int main() {
int x, y, z; // x代表公鸡数量,y代表母鸡数量,z代表小鸡数量
for (x = 0; x <= 20; x++) { // 公鸡最多买20只
for (y = 0; y <= 33; y++) { // 母鸡最多买33只
z = 100 - x - y; // 剩余的数量就是小鸡的数量
if (z % 3 == 0 && x * 5 + y * 3 + z / 3 == 100) {
printf("公鸡:%d只,母鸡:%d只,小鸡:%d只\n", x, y, z);
}
}
}
return 0;
}
这段代码使用两个嵌套的for循环来遍历所有可能的公鸡和母鸡的数量组合。
对于每一对组合,它计算出小鸡的数量,然后检查是否满足题目的条件。
如果满足条件,它就打印出这一组解。
C-C 语言趣味程序设计编程百例精解(7)

C-C++语言趣味程序设计编程百例精解(7).txt蜜蜂整日忙碌,受到赞扬;蚊子不停奔波,人见人打。
多么忙不重要,为什么忙才重要。
61.1~9组成三个3位的平方数将1、2、3、4、5、6、7、8、9九个数字分成三组,每个数字只能用一次,即每组三个数不允许有重复数字,也不许同其它组的三个数字重复,要求每组中的三位数都组成一个平方数。
*问题分析与算法设计本问题的思路很多,这里介绍一种简单快速的算法。
首先求出三位数中不包含0且是某个整数平方的三位数,这样的三位数是不多的。
然后将满足条件的三位数进行组合,使得所选出的3个三位数的9个数字没有重复。
程序中可以将寻找足条件的三位数的过程和对该三位数进行数字分解的过程结合起来。
*程序说明与注释#include<stdio.h>int main(){int a[20],num[20][3],b[10]; /*a:存放满足条件的三位数*//*若不是10 的倍数,则分解三位数*//*分解该三位数中的每一个数字*/int i,j,k,m,n,t,flag;printf("The 3 squares with 3 different digits each are:\n");for(j=0,i=11;i<=31;i++) /*求出是平方数的三位数*/if(i%10!=0) /*若不是10的倍数,则分解三位数*/{k=i*i; /*分解该三位数中的每一个数字*/num[j+1][0]=k/100; /*百位*/num[j+1][1]=k/10%10; /*十位*/num[j+1][2]=k%10; /*个位*/if(!(num[j+1][0]==num[j+1][1]||num[j+1][0]==num[j+1][2]||num[j+1][1]==num[j+1][2])) /*若分解的三位数字均不相等*/a[++j]=k; /*j:计数器,统计已找到的满足要求的三位数*/}for(i=1;i<=j-2;++i) /*从满足条件的三位数中选出三个进行组合*/{b[1]=num[i][0];b[2]=num[i][1];b[3]=num[i][2];for(t=i+1;t<=j-1;++t){b[4]=num[t][0]; /*取第t个数的三位数字*/b[5]=num[t][1];b[6]=num[t][2];for(flag=0,m=1;!flag&&m<=3;m++) /*flag:出现数字重复的标记*/for(n=4;!flag&&n<=6;n++) /*判断两个数的数字是否有重复*/if(b[m]==b[n])flag=1; /*flag=1:数字有重复*/if(!flag)for(k=t+1;k<=j;k++){b[7]=num[k][0]; /*取第k个数的三位数字*/b[8]=num[k][1];b[9]=num[k][2];for(flag=0,m=1;!flag&&m<=6;m++) /*判断前两个数字是否*/for(n=7;!flag&&n<=9;n++) /*与第三个数的数字重复*/if(b[m]==b[n])flag=1;if(!flag) /*若均不重复则打印结果*/printf("%d,%d,%d\n",a[i],a[t],a[k]);}}}}*运行结果The 3 squares with 3 different digits each are:361,529,784*思考题将1、2、3、4、5、6、7、8、9九个数字分成二组,每个数字只能用一次,一组形成一个5位数,另一组形成一个4位数,使得前者为后者的n倍。
C++趣味程序

using namespace std;
void main()
{
double n,i,x;
for(n=12;;n++)
if(term>max)
{
max=term;
n1=i1;
n2=i2;
n3=i3;
n5=i5;
n8=i8;
}
}
cout<<"为了使得存入银行20年后获得的利息最多,他应该这样做:"<<endl;
using namespace std;
void main()
{
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int b[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int y,m,d,g,s,b;
cout<<count<<":"<<a<<","<<b<<","<<c<<" ";
if(count%5==0) cout<<endl;
}
}
9.杨辉三角
在屏幕上显示杨辉三角。
#include <iostream>
#include <iomanip>
using namespace std;
cout<<"*"<<endl;
C语言程序设计100例之(37):文具订购
C语⾔程序设计100例之(37):⽂具订购例37 ⽂具订购题⽬描述⼩明的班上共有n元班费,同学们准备使⽤班费集体购买 3 种物品:圆规,每个7元。
笔,每⽀4元。
笔记本,每本3元。
⼩明负责订购⽂具,设圆规,笔,笔记本的订购数量分别为a,b,c,他订购的原则依次如下:n 元钱必须正好⽤光,即 7a+4b+3c=n。
在满⾜以上条件情况下,成套的数量尽可能⼤,即 a,b,c中的最⼩值尽可能⼤。
在满⾜以上条件情况下,物品的总数尽可能⼤,即 a+b+c尽可能⼤。
请你帮助⼩明求出满⾜条件的最优⽅案。
可以证明若存在⽅案,则最优⽅案唯⼀。
输⼊格式输⼊仅⼀⾏⼀个整数,代表班费数量 n(0≤n≤105)。
输出格式如果问题⽆解,请输出−1。
否则输出⼀⾏三个⽤空格隔开的整数 a, b, c,分别代表圆规、笔、笔记本的个数。
输⼊样例33输出样例1 2 6说明/提⽰样例解释a=2,b=4,c=1也是满⾜条件 1,2的⽅案,但对于条件 3,该⽅案只买了 7 个物品,不如 a=1,b=2,c=6的⽅案。
(1)编程思路。
因为全套的价格是14元,因此要使a、b、c中的最⼩值尽可能⼤,购买时应尽可能地买更多的整14元。
⽽全套中7元最⼤,7=3+4,也就是⼀个a可以被拆成⼀个b和⼀个c,因此a应该是a、b、c中的最⼩值,最⼤可能为n/14。
在购买了尽可能多的整14元之后,剩余的钱再尽量拆分成3元或4元。
如果买完尽量多的整14元套数后,剩下的钱不能拆分为3元或4元的组合,只需要少购买⼀整套14元的物品(a=a-1),相当于剩下的前多了14元,⼀定可以分解为3元和4元的组合。
为了尽量买更多的物品(即a+b+c尽可能⼤),剩下的钱应该优先购买c。
例如12可分拆为3个b,或者4个c。
有了上⾯的分析,可以对a、b、c的取值进⾏穷举。
先穷举最⼩值a的个数,其取值范围最⼤为n/14,最⼩为0,从n/14穷举到0。
再穷举c,其穷举范围的最⼤值为(n-7*a)/3,最⼩值为a,同样从最⼤值(n-7*a)/3穷举到最⼩值a。
vc编程设计例题100例
vc编程设计例题100例VC编程是指使用Visual C++进行程序设计的一种方法。
在学习VC 编程的过程中,通过实际的例题练习,可以更好地掌握编程技巧和应用。
下面将介绍一些VC编程设计例题,供大家参考。
1. 编写一个程序,实现两个整数的加法运算,并输出结果。
2. 编写一个程序,实现两个整数的乘法运算,并输出结果。
3. 编写一个程序,实现两个整数的除法运算,并输出结果。
4. 编写一个程序,实现两个整数的取余运算,并输出结果。
5. 编写一个程序,实现两个整数的比较,并输出较大的数。
6. 编写一个程序,实现两个整数的比较,并输出较小的数。
7. 编写一个程序,实现两个整数的平均值计算,并输出结果。
8. 编写一个程序,实现两个整数的最大公约数计算,并输出结果。
9. 编写一个程序,实现两个整数的最小公倍数计算,并输出结果。
10. 编写一个程序,实现一个整数的阶乘计算,并输出结果。
11. 编写一个程序,实现一个整数的平方计算,并输出结果。
12. 编写一个程序,实现一个整数的立方计算,并输出结果。
13. 编写一个程序,实现一个整数的平方根计算,并输出结果。
14. 编写一个程序,实现一个整数的立方根计算,并输出结果。
16. 编写一个程序,实现一个整数的正弦计算,并输出结果。
17. 编写一个程序,实现一个整数的余弦计算,并输出结果。
18. 编写一个程序,实现一个整数的正切计算,并输出结果。
19. 编写一个程序,实现一个整数的反正弦计算,并输出结果。
20. 编写一个程序,实现一个整数的反余弦计算,并输出结果。
21. 编写一个程序,实现一个整数的反正切计算,并输出结果。
22. 编写一个程序,实现一个整数的自然对数计算,并输出结果。
23. 编写一个程序,实现一个整数的指数计算,并输出结果。
24. 编写一个程序,实现一个整数的对数计算,并输出结果。
25. 编写一个程序,实现一个整数的四舍五入计算,并输出结果。
26. 编写一个程序,实现一个整数的向上取整计算,并输出结果。
c语言小程序
c语言小程序11个C语言经典小程序1.用1分钱、2分钱、5分钱组成1元钱,请给出所有的组合方式。
#includeint main(){int m, n, k=0;for(m=0; m<=100/5; m++)for(n=0; n<=(100-5*m)/2; n++){printf("1分%d个,2分%d个,5分%d个\n", 100-5*m-2*n, n, m);k++;}printf("共有%d种组合方式\n", k);return 0;2.统计输入单词个数:// 计算标准输入中单词“the”出现的次数。
字母是区分大小写的,输入中的单词由一个或多次空白字符分隔。
#include#include#includecharconst whitespace[] = " \n\r\f\t\v";int main (){char buffer[101];int count;char *word;count = 0;// 读入文本行,直到发现EOFwhile( gets(buffer) ) {// 从缓冲区逐个提取单词,直到缓冲区内不再有单词。
for( word = strtok ( buffer, whitespace );word != NULL;word = strtok( NULL, whitespace )){if(strcmp( word, "the" ) == 0 )count += 1;}}printf("%d\n", count);return EXIT_SUCCESS;}我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?3.翻译过来,意思是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?#includeint main(){inti, j, k;printf("百元买百鸡的问题所有可能的解如下:\n");for(i=0; i<= 100; i++ )for( j=0; j <= 100; j++ )for( k=0; k <= 100; k++ ){if( 5*i+3*j+k/3==100 && k%3==0 &&i+j+k==100 ){printf("公鸡%2d 只,母鸡%2d 只,小鸡%2d 只\n", i, j, k);}}return 0;}4.C语言输出菱形,就是如下所示的图形,总行数与总列数相等:#include#includeint main(){int line; // 菱形总行数int column; // 菱形总列数inti; // 当前行int j; // 当前列printf("请输入菱形的行数(奇数):");scanf("%d", &line);if(line%2==0){ // 判断是否是奇数printf("必须输入奇数!\n");exit(1);}column = line; // 总行数和总列数相同for(i=1; i<=line; i++){ // 遍历所有行if(i<(line+1)/2+1){ // 上半部分(包括中间一行)for(j=1; j<=column; j++){ // 遍历上半部分的所有列if( (column+1)/2-(i-1)<=j && j<=(column+1)/2+(i-1) ){ printf("*");}else{printf(" ");}}}else{ // 下半部分for(j=1; j<=column; j++){ // 遍历下半部分的所有列if( (column+1)/2-(line-i)<=j && j<=(column+1)/2+(line-i) ){ printf("*");}else{printf(" ");}}}printf("\n");}return 0;}5.C语言输出九九乘法表#includeint main() {inti,j; // i, j控制行或列for(i=1;i<=9;i++) {for(j=1;j<=9;j++)// %2d 控制宽度为两个字符,且右对齐;如果改为%-2d 则为左对齐// \t为tab缩进printf("%d*%d=%2d\t", i, j, i*j);printf("\n");return 0;}6.编写一个程序,对标准输入进行扫描,并对单词“the”出现的次数进行计数。
C#程序设计案例教程习题解答
static void Main(string[] args) {
Console.WriteLine("请输入一个整数"); string x = Console .ReadLine (); int y = int.Parse (x); for(int i=0;i<x.Length ;i++) {
2-6. 求下面算术表达式的值,并编写程序运行,验证其结果。
(1)x+a%3*(int)(x+y)%2/4,其中 x=2.5,a=7,y=4.7
(2)x+‘A’+(float)(a+b)/2+x%y,其中 a=2,b=3,x=3.5,y=2.5;
2-7.设有说明语句 int x=1,y=2,z=-2;计算一下各表达式的值。
for (k = 2; k < i; k++) if (i % k == 0) break;
if (k >= i) Console.WriteLine(i); i++; } while (i <= 100); }
3-8. 求出 1~1000 之间的所有能被 7 整除的数,并计算和,且每行输出每 5 个数。
习题一
1-1. 选择题
(1) 下面对 Read()和 ReadLine()方法的描述,哪些是正确的。(A,D) A. Read()方法一次只能从输入流中读取一个字符 B. 使用 Read()方法读取的字符不包含回车和换行符 C. ReadLine()方法读取的字符不包含回车和换行符 D. 只有当用户按下回车键时,Read()和 ReadLine()方法才会返回 (2) 下面对 Write()和 WriteLine()方法的描述,哪些是正确的。(B) A. WriteLine()方法在输出字符串的后面添加换行符 B. 使用 Write()方法输出字符串时,光标会位于字符串后面 C. 使用 Write()和 WriteLine()方法输出数值变量时,必须要先把数值变量转换成字 符串 D. 使用不带参数的 WriteLine()方法时,将不会产生任何输出 1-2.C#程序从哪儿开始执行?(Main()方法) 1-3. 在 C#程序中,using System 是必须的吗?(是) 1-4.C#中有两种注释方法:_//_____适用于单行注释,/* */______适用于多行注 释。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C趣味程序百例(24)小明买书
76.小明买书
小明假期同爸爸一起去书店,他选中了六本书,每本书的单价分别为:3.1,1.7,2,5.3,0.9和7.2。
不巧的是,小明的爸爸只带了十几块钱,为了让小明过一个愉快的假期,爸爸扔然同意买书,但提邮购一个要求,要小明从六本书中选出若干本,使得单价相加所得的和同10最接近。
你能够帮助小明解决这个问题吗?
*问题分析与算法设计
分析题意,可将题目简化为:从六个数中选出若干个求和,使得和与10的差值最小。
题目中隐含两个问题,其一是怎样从六个数中选出若干个数;其二是求与10的差。
从六个数中选出若干个数实质是从六个数中选出若干个进行组合。
每个数在组合过程中只有两种情况:要么是选中参加求和,要么是没选中不参加求和。
这样就可以使用六重循环对每个数是否参加求和进行全部可能情况的组合。
关于求与10的差值应当注意的是:差值的含义是指差的绝对值。
例如:"9-10=-1"和"11-10=1",但9和11这两者与10的差值都是1。
若认为"9"与"10的差值为-1就错了。
*程序与程序注释
#include
#include
void main()
{
int d[6],m,i,j;
long b[63],flag;
float c[6],min,x;
printf("Please enter the prices of 6 books:");
for(i=0;i
for(i=0,min=-1,d[0]=0;d[0]
for(d[1]=0;d[1]
for(d[2]=0;d[2]
for(d[3]=0;d[3]
for(d[4]=0;d[4]
for(d[5]=0;d[5]
{
for(flag=0,x=0,j=5;j>=0;j--)
/*flag:将六个数的组合用对应的一个十进制位表示 x:对应六个数组合的和*/ {
x+=c[j]*d[j]; flag=flag*10+d[j];
}
x=((x-10>0)? x-10:10-x); /*x: 组合的和与10的差*/
if(min
{
min=x; /*对第一次计算出的差min进行处理*/
b[i++]=flag; /*b[]:有相同的min的flag的数组 i:b[]数组的下标*/
}
else if(min-x>1.e-6) /*对新的min的处理*/
{
min=x; b[0]=flag; i=1;
}
else if(fabs((double)x-min)
b[i++]=flag; /*对相等min的处理*/
}
for(m=0;m
{
printf("10(+ -)%.2f=",min);
for(flag=b[m],j=0;flag>0;j++,flag/=10)
if(flag%10) /*将b[]中存的标记flag还原为各个数的组合*/
if(flag>1) printf("%.2f+",c[j]);
else printf("%.2f\n",c[j]);
}
}
*运行结果
Please enter the prices of 6 books:3.1 1.7 2.0 5.3 0.9 7.2
10(+ -)0.10=2.00+0.90+7.20
10(+ -)0.10=1.70+2.00+5.30+0.90
10(+ -)0.10=3.10+1.70+5.30
*思考题
可以看出,程序中求六个数所能产生全部组合的算法并不好,使用六重循环进行处理使程序显得不够简洁。
可以设计出更通用、优化的算法产生全部组合。
1 2。