就解c语言的经典算法题目题

14:35 提问
C语言 这道题怎解 似乎并不难
Description
Lasercat numbers are defined recursively as follows.
(1) numbers 1 and 2 are L
(2) if a and b are Lasercat numbers, so is (a+b)^2-1;
(3) only the numbers defined in (1) and (2) are Lasercat numbers.
Now your task is to judge whether an integer is a Lasercat number.
There are several lines in input. The first line of the input is the number of the cases, the next each line has a non-negative integer a, 0&=a&=.
For the number a on each line of the input, if a is a Lasercat number, output “YES!”, otherwise output “NO!”.
Sample Input
Sample Output
按赞数排序
打表啊。。最多sqrt(1e9)这么多。。
其他相关推荐
其他相似问题欢迎加入我们,一同切磋技术。 &
用户名: &&&
密 码: &
共有 1858 人关注过本帖
标题:怎么用C语言解决这个数学问题
来 自:中国
等 级:新手上路
&&已结贴√
&&问题点数:10&&回复次数:16&&&
怎么用C语言解决这个数学问题
在一根长100厘米的木棍上,从左至右每隔6厘米染一个红点,
同时从右至左每隔5厘米染一个红点,然后沿红点处将木棍逐段锯开,
那么长度是1厘米的短木棍有几根?
搜索更多相关主题的帖子:
等 级:黑侠
帖 子:190
专家分:500
定义一个长101的数组,初始化为0。从0-101,每6个下标的值变成1,从101-0每5个下标的值变成1。最后判断有几组下标相连的值为1
来 自:中国
等 级:新手上路
回复 2楼 我爱吃青菜
等 级:黑侠
帖 子:190
专家分:500
a[101]={0}&&& n=0
a[0],a[6],a[12].........=1
a[101],a[96],a[91],a[86]...........=1
if(a[i]==1&&a[i+1]==1)n++
来 自:中国
等 级:新手上路
回复 4楼 我爱吃青菜
那如果木棍的长度不固定呢,如果是10米,100米,甚至更长呢
等 级:ID已被封
威 望:30
帖 子:2976
专家分:7697
大概可能是7个。
int main()
&&& size_t count = 0;
&&& for(int i=5; i&=100; i+=5)
&&&&&&&&if((i+1)%6==0 || (i-1)%6==0){
&&&&&&&&&&&&printf(&i=%d &, i);
&&&&&&&&&&&&count++;
&&& printf(&\ncount = %d\n&,count);
&&& return 0;
我们都在路上。。。。。
来 自:中国
等 级:新手上路
回复 6楼 hellovfp
大神,那如果是是10000cm呢
来 自:中国
等 级:新手上路
回复 6楼 hellovfp
大神,你是怎么理解的,思路
等 级:贵宾
威 望:103
帖 子:3280
专家分:12654
就是解个二元一次不定方程。
重剑无锋,大巧不工
等 级:论坛游侠
帖 子:22
专家分:120
计算它们有几个重合点 每个重合点左右6cm各一个&&注意 前端 末端 各离其就近重合点是否有够6cm
版权所有,并保留所有权利。
Powered by , Processed in 0.070635 second(s), 7 queries.
Copyright&, BCCN.NET, All Rights Reserved程序设计技术基础(C语言)习题集题解分析 第一、二、三章 一、选择题(四个选项中只有一个是正确的----下同) 1.与十进制数97不等值的字符常量是
B) ’\\101’
C) ’\\x61’
D) ’\\141’ 题解分析:小写字母a的ASCII码是97;十六进制61转换为十进制为97;八进制141转换为十进制为97;八进制101转换为十进制为65,不等于97。 参考教材:p21 (3)字符常量;p22 转义字符表2-12,及其讲解。 2.在编写了一个C语言源程序C001.C并正确执行之后,当前目录下哪个文件不存在
B) C001.OBJ
C) C001.DAT
D) C001.EXE 题解分析:源程序C001.C经编译后生成目标文件C001.OBJ,再经过链接后生成可执行文件C001.EXE。 参考教材:p7 1.5.2 链接目标程序 3.以下选项中正确的整型常量是 A)
D)4/5 题解分析:整型常量及整数也,实型常量及实数也。 参考教材:p19(1)整型常量,p20(2)实型常量 4.以下选项中正确的实型常量是 A) 0
C)0.03x102
D).32 题解分析:0――属于整型常量;3.
1415――小数点和1415间不能分开(计算机不认);0.03x102――在C语言中要用0.03e2或0.03E2来表示。 参考教材:p20(2)实型常量 5.以下选项中不正确的实型常量是 A)2.670E-1
B)0.05e+1.5
题解分析: C语言在科学计数法表示实型常量时,指数部分必须是整数,不可用小数。答案B)中的0.05e+1.5表示的是0.05×101.5,指数1.5不符合要求。 6.以下选项中不合法的用户标识符是 A)wb-1
题解分析:在C语言中标识符只能由字母、数字和下划线组成,A)中的“-”错了。 参考教材:p17 2.3.1 标识符 7.以下选项中不合法的用户标识符是
D)Dim 题解分析:参考上一题,$错了,printf是库函数名,如果不调用该函数,就可用。 注:教材有误。 8.C语言中运算对象必须是整型的运算符是 A)%
D)+ 参考教材:p25 第一段第二行。 9.可在C程序中用作标识符的一组标识符是 A)void
SiG 题解分析:A)中的void和C)中的case是关键字,D)中的2c不符合数字不能打头的要求。另外,For和If因为有大写字母,所以不是关键字,C语言的关键字必须全部小写。 参考教材:p17 2.3.1 标识符。 10.若变量已正确定义并赋值,符合C语言语法的表达式是 A)a=a+7;
B)a=7+b+c,a++
C)int(12.3%4)
D)a=a+7=c+b 题解分析:a=a+7;因为有分号,所以是一个表达式语句,不是单纯的表达式;int(12.3%4)是强制类型转换,按照规定,int要写成(int),正确的形式是(int)(12.3%4);a=a+7=c+b:按照C规定赋值号左边必须是变量,“7”在赋值号“=”左边但不是变量;而a=7+b+c,a++是一个逗号表达式。 参考教材:p24 2.4.1 算数运算符及算数表达式;p32 2.4.6 逗号表达式;p33 2.4.7 数据类型的转换 11.以下非法的赋值语句是 A) n=(i=2,++i);
C) ++(i+1);
题解分析:按照C规则,++(i+1)相当于i+1=(i+1)+1, 1不可出现在”=”号左边。 参考教材:p26-27 例2-9后至例2-11前的讲解。 12.设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是
A) 6.500000
C) 5.500000
D) 6.000000 题解分析:(int)a+b/b: 现将a转换为整型5,在加b/b=1.000000, 按照C的规则,整型数+浮点数,结果为浮点数。 参考教材: p33 2.4.7 数据类型的转换 13.已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1 && y+z/2的值是
D) 1 题解分析:C语言中非零为真,只有零为假。(p30表2-17下面的注②) !(x+y)= !7=0 ; !(x+y)+z-1=0+5-1=4为真;y+z/2=4+5/2为真,所以:真&&真 还是真,真的结果用“1”表示。 参考教材: p29 2.4.2 关系运算符及关系表达式;p30 2.4.3 逻辑运算符及逻辑表达式 14.以下叙述中正确的是 A)a是实型变量,C允许以下赋值a=10,因此可以这样说实型变量中允许存放整型值。 B)在赋值表达式中,赋值号右边既可以是变量也可以是任意表达式 C)执行表达式a=b后,在内存中a和b存储单元中的原有值都将被改变,a的值已由原值改变为b的值,b的值由原值变为0 D)已有a=3, b=5。当执行了表达式a=b,b=a之后,已使a中的值为5,b中的值为3 题解分析:A)C语言为不同类型的变量分配不同数量的内存单元,当把一个整型常量赋给一个实型变量时,系统自动将该整型常量转换为实型常量赋给实型变量。C)和D):在C语言中当将一个变量赋给另一个变量时,赋给另一个变量的变量值不变。但被赋值的变量值改变为给其赋值的变量的值,所以C)中执行表达式a=b后,内存中a存储单元中的原有值被改变,等于b存储单元中的值,而b存储单元中的原有值不变。D)中执行了表达式a=b之后a=5,再执行b=a后还是b=5,所以a和b如要相互交换需引进第三变量。 参考教材:p24 2.4 基本运算符、表达式及运算的优先级;2.4.8 复杂表达式的计算顺序。 15.以下叙述中正确的是 A)在C程序中,无论是整数还是实数,只要在允许的范围内都能准确无误的表示。 B)C程序由主函数组成。 C)C程序由函数组成。 D)C程序由函数和过程组成。 题解分析:A)当将一个十进制小数用二进制小数表示时,有除不尽(其实是乘不尽)的情况,也就是无法准确表示。B)主函数是必须的,但不能代表全部。D) C程序中的函数和其它高级语言的过程是一回事,但不叫过程。 参考教材:p 16.Turbo C中int类型变量所占字节数是 A)1
D)4 题解分析:Turbo C中int类型变量占2字节。参考教材:p15 表2-3 17.不合法的八进制数是 A)0
D)01 题解分析:代表8进制的符号是0-7,没有8这个数码。 18.不合法的十六进制数是 A)oxff
D)0x19 题解分析:C语言中十六进制数以0x开头,oxff的第一个是字母“O”,而不是数字“0”。 参考教材:p19 (1)整型常量 19.若a、b、c、d都是int类型变量且初值为0,以下选项中不正确的赋值语句是 A)a=b=c=100;
D)d=(c=22)-(b++); 题解分析:赋值语句应有赋值号“=”,B)与C)没有,但d++是d=d+1的简化形式。 20.以下选项中不是C语句的是 A){
printf(“%d\\n”,
B); C)a=5,c=10
} 题解分析:C语句要以分号“;”结尾,C)无,如果只有一个分号,称其为“空语句”。 21.以下合法的C语言赋值语句是 A)a=b=58
B)k=int(a+b);
C)a=58,b=58
D)--i; 题解分析:A)和D)结尾无分号,B)的正确形式是k=(int)(a+b); 参考教材:p33 2.4.7 数据类型的转换 22.以下程序的输出结果是
printf(“%d\\n” , y = x / y);
D)不确定的值 题解分析:按常识x / y=3.333,但由于它们是整型变量,整型变量无小数点。 23.C语言中的简单数据类型有 A)整型、实型、逻辑型
B)整型、实型、字符型 C)整型、字符型、逻辑型
D)整型、实型、逻辑型、字符型 题解分析:C语言中无逻辑型变量。 24.C语言中,字符(char)型数据在微机内存中的存储形式是 A)反码
C)EBCDIC码
D)ASCII码 题解分析:参考教材p16表2-6 25.设有语句char
a= ?\\172?;,则变量a A)包含1个字符
B)包含2个字符
C)包含3个字符
D)说明不合法 题解分析:参考教材p22表2-12 26.C语言中不合法的字符常量是
A)?\\xff?
D)?\\028? 题解分析:?\\028?表示的是8进制数,但8进制中不应有数字“8”。另外,‘\\ddd?可以是1-3位8进制数,所以B)也正确。另外?\\xhh?可以是1-2位十六进制数。(教材可以修正一下) 27.C语言中不合法的字符串常量是 A)”\\121”
C)”\\n\\n”
D)”ABCD\\x6d” 题解分析:字符串常量用双引号,所以B)不对。参考p21 (4)字符串常量 28.若变量已正确说明为int类型,要给a、b、c输入数据,以下正确的输入语句是 A)read(a,b,c)
B)scanf(“%d%d%d”,a,b,c); C)scnaf(“%D%D%D”,&a,&b,&C);
D)scanf(“%d%d%d”, &a,&b,&c); 题解分析:B)中输入变量前没加&;C)中两处错。一处是3个%D,D必须小写,另一处是&C,大写C与小写c表示的是不同的变量。 参考教材:p41 2.5.2 格式化输入函数scanf() 29.若变量已正确说明为float类型,要通过以下赋值语句给a赋予10、b赋予22、c赋予33,以下不正确的输入形式是
scanf(“%f
%f”, &a, &b, &c); A)10
B)10.0,22.0,33.0
33 题解分析:当%f之间用空格分开时,输入数据时可用空格、回车区分。 30.已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是
A)scanf(\010203 或 1 2 3
B)scanf(\1 2 3 C)scanf(\ 1,2,3 D)scanf(\i=1,j=2,k=3 题解分析:每句后面的红色是对应的输入格式 31.若有以下程序:
{ int k=2, i=2,
m=(k+=i*=k); printf(\
} 执行后的输出结果是
D) 7,4 题解分析:m=(k+=i*=k)从右向左运算:1.i*=k 即 i=i*k=2*2=4 2.k+=i即k=k+i=2+4=6 3.m=k=6。 32 若变量已正确定义,要将a和b中的数进行交换,下面不正确的语句是 A)a=a+b, b=a-b, a=a-b;
B)t=a; a=b; b=t; C)a=t; t=b; b=a;
D)t=b; b=a; a=t; 题解分析:用具体数试一遍。 33.有以下程序
int i = 10, j = 1;
} 执行后输出结果是
D) 10,1 题解分析:略 34.若变量已正确定义,以下程序段的输出结果是
x=5.16894;
printf(“%f\\n”, (int)(x*)/(float)1000); A)输出格式说明与输出项不匹配,输出无定值
B)5.17000 C)5.168000
D)5.169000 题解分析:(int)(x*)=(int)(5.+0.5) = (int)(.5) = (int) (69
5169/(float) 35.若有以下程序段,c3中的值是
c1 = 1, c2 = 2, c3;
c3 = c1 / c2;
D)1 题解分析:0.5取整为零 36.若有以下程序段,其输出结果是
a = 0, b = 0, c = 0;
c = ( a -= a - 5), (a = b, b+3);
printf(“%d,%d,%d\\n”,a, b, c); A)0,0,-10
C)-10,3,-10
D)3,3,-10 题解分析:关键句:c = ( a -= a - 5), (a = b, b+3); 逗号表达式,第一部分:c = ( a -= a - 5),第二部分:(a = b, b+3)。先算第一部分从右到左a-=a-5可写成a=a-(a-5),得a=5,再得c=5; 第二部分:(a=b,b+3); 得a=0;由此可得:a=0 (取第二个表达式的值),b=0(其值没变),c=5(第一部分所得)。 37.当运行以下程序时,在键盘上从第一列开始,输入(此处表示Enter),则程序的输出结果是
scanf(“-?O”, &a, &b, &c);
printf(“\\na=%d,b=%f,c=%f\\n”,a, b, c);
} A)a=98,b=765,c=4321
B)a=10,b=432,c=8765 C)a=98,b=765.000000,c=
D)a=98,b=765.0,c=4321.0 题解分析:scanf(“-?O”, &a, &b, &c);语句a取两位,b取3位,c取4位。 38.以下程序的输出结果是
a = 2, b =5;
printf(“a=%%d,b=%%d\\n”,a, b);判断日期为一年中的第几天(考虑闰年)
2 * 计算该日在本年中是第几天,注意闰年问题
3 * 以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天
4 * 特殊情况,闰年且输入月份大于3时需考虑多加一天
8 *@author: 成鹏致远
12 #include &stdio.h&
13 #include &stdbool.h&
15 struct year_mon_day
22 int main()
int//总天数
bool flag = false;//闰年标志
struct year_mon_
printf("Pls input year,mon day:");
scanf("%d%d%d",&ymd.year,&ymd.mon,&ymd.day);
switch(ymd.mon)
sum = 120;
sum = 151;
sum = 181;
sum = 212;
sum = 243;
sum = 173;
sum = 304;
sum = 334;
printf("data error \n");
sum += ymd.
if(ymd.year/100 || (ymd.year%4 && ymd.year%100 != 0))
flag = true;
if(1==flag && ymd.mon&2)
printf("%d年%d月%d日 是%d年的第%d天 \n",ymd.year,ymd.mon,ymd.day,ymd.year,sum);
十进制转十六进制
1 /*函数实现输入一个十进制数,输出对应的十六进制数*/
3 *@author: 成鹏致远
7 #include &stdio.h&
8 #include &stdbool.h&
9 #define LIM 32
11 int main(void)
int decimal;
bool negative = false;
printf("pls input the integer to convert:\n");
if(!scanf("%d", &decimal))
printf("we need an integer, Bye-bye!\n");
return -1;
if(decimal & 0)
negative = true;
decimal *= -1;
int i, num[LIM];
for(i=0; i&LIM && decimal!=0; i++)
num[i] = decimal%16;
decimal /= 16;
if(negative)
printf("answer: -0x");
printf("answer: 0x");
for(j=i; j&0; j--){
switch(num[j-1]){
printf("a");
printf("b");
printf("c");
printf("d");
printf("e");
printf("f");
printf("%d", num[j-1]);
} //switch
printf("\n");
打印指定的字母金字塔(技巧)
产生一个字母金字塔图案
author:成鹏致远
7 #include &stdio.h&
9 void PintLetterPic(char);
//打印出金字搭字母图案
11 int main()
printf("Please input a capital letter:");
scanf("%c",&letter);
PintLetterPic(letter);
23 void PintLetterPic(char c)
//打印出金字搭字母图案
int len = c - 'A'+1;
//注意这里需要+1!!!
int len2 = 2*
char tem[100][200];
char tempchar = 'A';
for(i=0; i&100; i++)
//初始化二维数组
for(j=0; j&200; j++)
tem[i][j] = ' ';
38 /*******************************核心算法*********************************************/
for(i=0; tempchar&=c; i++,tempchar++)//从最中间列从上往下控制行
int m = 1;
char temp =
//需要保存tempchar的一个临时变量,保证tempchar在while循环中不被改变
tem[i][len] =
//控制最中间的一列
while('A' != temp)
//从行最中间左右控制列
tem[i][len-m]=tem[i][len+m]=--
54 /*******************************核心算法*********************************************/
for(i=0; i& i++)
//打印出金字塔图案
for(j=0; j&len2; j++)
printf("%c",tem[i][j]);
printf("\n");
求float型数的幂
1 /*用循环的方法实现,返回一个float 类型数的某个整数次幂,保留六位小数*/
3 *@author: 成鹏致远
7 #include &stdio.h&
8 #include &math.h&
10 float my_power(float cardinal, int pow);
//返回cardinal的pow次幂
12 int main()
printf("Please input a float cardinal and a int pow(3.14,-2):");
scanf("%f,%d",&cardinal,&pow);
printf("%f的%d次幂是:%.6f \n",cardinal,pow,my_power(cardinal,pow));
25 float my_power(float cardinal, int pow)
float result = 1.0;
int abs_pow = abs(pow);
if(0 != abs_pow)
while(abs_pow--)
result *= pow&0?cardinal:1/
result =1;
输出小于指定数的所有素数
接受一个整数输入,然后显示所有小于或等于该数的素数
编译时请加 -lm 选项,链接到 math 库
author:成鹏致远
8 #include &stdio.h&
9 #include &stdbool.h&
10 #include &math.h&
12 bool IsPrime(int a);//判断是否为素数
13 void PoutPrime(int a);//输出所有小于或等于该数的素数
15 int main()
printf("Please input a number:");
scanf("%d",&nem);
PoutPrime(nem);
27 bool IsPrime(int a)//判断是否为素数
int j = sqrt(a);
for(i=2; i&=j; i++)
if(0 == a % i)
return false;
return true;
42 void PoutPrime(int a)//输出所有小于或等于该数的素数
printf("小于或等于%d 的所有素数列表:\t",a);
if(IsPrime(a))
printf("%d\t",a);
printf("\n");
辗转相除法求最大公约数(铺砖)
2 * 返回两个整数的最大公约数,用辗转相除法求最大公约数
3 * 辗转相除法:铺地砖
4 * author:成鹏致远
8 #include &stdio.h&
10 int Divisor(int a, int b)
//最大公约数
while(0 != b)
temp = a %
//最大公约数
//最大公倍数为两数的乘积除以最大公约数
30 int main()
printf("Please input two numbers:");
scanf("%d%d",&a,&b);
printf("%d 和%d 的最大公约数是%d \n",a,b,Divisor(a,b));
递归实现汉诺塔(递归思想)
2 * 递归实现汉诺塔
3 * @author:成鹏致远
7 #include &stdio.h&
9 void move(char a, char b)//实现汉诺塔的移动
printf("%c&&%c \n",a,b);
16 * 功 能: 递归实现汉诺塔
: 盘子个数
18 * a,b,c: 三个盘座
20 void han_tower(int n, char a, char b, char c)
move(a,c);
//将前n-1个盘子从a借助c移动到b
han_tower(n-1,a,c,b);
//将a上的第n个盘子移动到c
move(a,c);
//将剩下的n-1个盘子从b借助a移动到c
han_tower(n-1,b,a,c);
37 int main()
printf("Pls input the number of diskes:");
scanf("%d",&num);
printf("the step to moving %d diskes: \n",num);
han_tower(num,'A','B','C');
乒乓球比赛对手配对(匹配)
2 题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定
3     比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出
4     三队赛手的名单。
@author: 成鹏致远
12 #include &stdio.h&
14 int main(void)
char i,j,k;
for(i='x';i&='z';i++)//a对手
for(j='x';j&='z';j++)//b对手
if(i!=j)//a,b同对
for(k='x';k&='z';k++)//c对手
if(i!=k&&j!=k)//a,b,c同对
if(i!='x' && k!='x' && k!='z')//a不和x比,c不和x,z比
printf("order is a--%c\tb--%c\tc--%c \n",i,j,k);
函数区间求最大值(方法)
2 编程:设x取值为区间[1,20]的整数,求函数f(x)=x-sin(x)- cos(x)的最大值
3 要求使用自定义函数实现f(x)功能
@author: 成鹏致远
11 #include "stdio.h"
12 #include "math.h"
13 double f()
double max=0,x;
for(i=1;i&=20;i++)
x=i-sin(i)-cos(i);
if(x-max&1e-6)
printf("%lf",f());
getchar();
分解质因数
2 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
3 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
4 (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
5 (2)如果n&&k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,
6   重复执行第一步。
7 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
10 #include &stdio.h&
11 #include &math.h&
printf("please input a number:\n");
scanf("%d",&n);
printf("%d=",n);
for(i=2;i&=sqrt(n);i++)
while(n!=i)
if(n%i==0)
printf("%d*",i);
printf("%d \n",n);
古代买鸡问题
2 编程解决如下问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。
3 百钱买百鸡,问鸡翁,鸡母,鸡雏各几何?
5 解决方案:数学问题,先用数学方法解决
6 1、设鸡翁、鸡母、鸡雏分别a、b、c只
7 2、5a+3b+c/3=100
8 3、a+b+c=100
9 4、解得:b=(100-7*a)/4;
c=(300+3*a)/4;
@author: 成鹏致远
19 #include&stdio.h&
21 void main()
int a,b,c;
for(a=0;a&20;a++)
b=(100-7*a)/4;
c=(300+3*a)/4;
if(a+b+c==100&&a&=0&&b&=0&&c&=0)
printf("%d,%d,%d\n",a,b,c);
字符串交叉连接
1 //输入两个字符串,要求将这两个字符串交叉连接。如串1为"ABCD",串2为"123456",则合并后的串为"A1B2C3D456"。
@author: 成鹏致远
8 #include&stdio.h&
9 #include&stdlib.h&   
10 void main()
char a[20],s[20],*p1,*p2;
if(*p1!='\0')
printf("%c",*p1);p1++;
if(*p2!='\0')
printf("%c",*p2);
if(*p1=='\0' && *p2=='\0')
2 题目:一个数如果恰好等于它的因子之和,这个数就称为&完数&。例如6=1+2+3.编程
3     找出1000以内的所有完数。
@author: 成鹏致远
11 #include &stdio.h&
13 int main(void)
static int k[10];
int i,j,n,s;
for(j=2;j&1000;j++)
for(i=1;i&=j/2;i++)
if((j%i)==0) //因子
s=s-i; //减到0则是完数
printf("%d 是一个完数 \n%d=",j,j);
for(i=0;i&n;i++)
printf("%d+",k[i]);
printf("%d \n",k[n]);
容器分水移动(算法)
2 编程解决如下数学问题:有12升水,怎样利用一个8升
3 和一个5升的容器将水分为两个6升?要求以如下格式
4 打印出分水步骤。
* ( &*&表示当前状态下每个容器的盛水量)
8 ......
@author: 成鹏致远
17 #include &stdio.h&
20 void move(int *ai,int *aj,int aiContainer,int ajContainer) //将油从一个容器导倒入另外一个容器
//移动容器目前盛水量,接收容器目前盛水量,移动容器容量,接收容器容量
if(aiContainer&ajContainer) //移动容器容量&接收容器容量
if(*ai+*aj&ajContainer) //将油倒入接收容器中,移动容器有剩余
*ai=*ai-(ajContainer-*aj);
*aj=*aj+ajContainer-*
else //将油倒入接收容器中,移动容器无剩余
else //移动容器容量&接收容器容量,则全部倒入接收容器中
43 int main(void)
int a[3]={12,0,0},i,m=0;
int container[3]={12,8,5};
printf("%-8s%-8s%-8s\n","a12","b8","c5");
printf("%-8d%-8d%-8d\n",a[0],a[1],a[2]);
while(a[0]!=6)
for(i=0;i&3;i++)//循环三次,分别从a-&b,b-&c,c-&a
move(&a[i],&a[(i+1)%3],container[i],container[(i+1)%3]);
printf("%-8d%-8d%-8d\n",a[0],a[1],a[2]);
if(a[0]==6 && a[1]==6)
printf("The total number is %d to reach success!",m);
getchar();
move(&a[1],&a[2],container[1],container[2]);//b-&c
printf("%-8d%-8d%-8d\n",a[0],a[1],a[2]);
if(a[0]==6 && a[1]==6)
printf("The total number is %d to reach success!",m);
getchar();
猴子吃桃问题(逆向思维)
2 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
3     第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
4     的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
5 1.程序分析:采取逆向思维的方法,从后往前推断。
@author: 成鹏致远
13 #include &stdio.h&
15 int main(void)
int day,x1,x2;
while(day&0)
x1=(x2+1)*2;
printf("the total is %d \n",x1);
统计字符数字等
2 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
@author: 成鹏致远
10 #include &stdio.h&
12 int main(void)
int letters=0,space=0,digit=0,others=0;
printf("please input some characters: \n");
while((c=getchar())!='\n')
if(c&='a'&&c&='z'||c&='A'&&c&='Z')
letters++;
else if(c==' ')
else if(c&='0'&&c&='9')
printf("all in all:char=%d space=%d digit=%d others=%d \n",letters,space,digit,others);
贪心算法用例(够纠结的)
2 编程解决如下问题。
3   请在整数n=中删除8个数字,使得余下的数字按原次序组成的新数最小。要求如下:
4   (1)整数n和删除数字的个数&8&在源程序中完成赋值,程序直接输出运行结果;
5   (2)程序结果输出先后被删除的数字(之间以逗号分隔)和删除后所得的最小数。
6   (提示:整数n可以以字符数组的方式定义、赋值和处理)
编写思路:
在前9位数字中寻找最小数字a1,记下该最小数字的位置b1,a1前面所有数字是该删除的,
个数m=b1-1,然后从a1后面开始继续操作,变为删除8-m个数字,从a1后8-m+1个数字中找最小值a2,
记下b2,删除a1与a2之间的数字,个数b2-b1-1。m=m+b2-b1-1.如此下去直至m=8,停止操作,
输出a1a2&&及最后一个a和之后的数字。
程序一是正确的,程序二是错误的
一和二的差别主要是在删除字符序列的顺序上
@author: 成鹏致远
23 //程序一:贪心算法
25 #include &string.h&
26 #include &stdio.h&
int main()
int i,m=8,t=0;
char p[10];
char s[]="";
for (i=0;i&12;i++)
while(t&&p[t-1]&s[i]&&m) //用p数组中的每一个元素和当前s[i]比较
t--,m--; //进入循环意味着s[i]比p[--t]小,需要将p[--t]输出,并且m-1
printf("%c",p[t]);
if(m) //未删除所有符合条件的元素之前,用逗号将各元素分开
printf(",");
p[t++]=s[i]; //p数组依次暂存前一位比后一位小的数字
} //循环结束后p数组中存储着最小的四位数
p[t]=0; //字符数组结束
printf("\n");
53 //程序二:这个是错误的,程序一和程序二的差别在删除字符序列的顺序
#include &stdio.h&
#include &stdlib.h&
void main()
char *s="";
printf("%s\n",s);
//去掉8个相当于取4个
int a,b,c,d;//下标
int aa,bb,cc,//某位数字
int ka,kb,kc,//最小值对应的下标
int min=10000;//当取4个时,设定初始最小值为5位数
67 //组和的值
for(a=0;a&=8;a++)
for(b=1;b&=9;b++)
for(c=2;c&=10;c++)
for(d=3;d&=11;d++)
&& (b&c) && (c&d)
)//保证不重复和先后顺序
aa=s[a]-'0';bb=s[b]-'0';cc=s[c]-'0';dd=s[d]-'0';//字符型转换为整数
num=aa*1000+bb*100+cc*10+//求组和数
if (num&min)//选择最小值以及下标
ka=a;kb=b;kc=c;kd=d;//最小值对应的下标
for(int i=0;i&=11;i++)//输出去掉的数
if(i!=ka && i!=kb && i!=kc && i!=kd)
printf("%c\t",s[i]);
printf("\n%d\n",min);//输出最小值
system("pause");
阅读(...) 评论()}

我要回帖

更多关于 计算机二级c语言题库 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信