版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1. 逆序存放数组中的数据,并输出指定元素本题要求编写程序,将给立的n个整数存入数组中,将数组中的这n个数逆序存放,再按要 求输岀指定的数组元素。输入格式:在第一行中给岀一个正整数n(lWnWlO)。第二行输入n个整数,用空格分开。第三行输 入一个非负整数m (mvn)。输出格式:在一行中输出逆序存放后下标为m的数组元素。行末无空格。输入样例:610 8 1 2 34 2输出样例:9(1) 编程思路。要将数组a中的n个元素逆序,只需将a0与anl、al与an-2、ai与an-l-i 交换即可,这样的交换共进行n/2组。采用一个简单的一重循环来完成。for (mt i=0;i<n/2;i+
2、)mt t=ai;ai=an-l-i;an l-i=t;(2) 源程序。#include <stdio.h>int mam ()mt nan;scaiif(H%dH.&n);int a10;int i;for (i=0;i<n;i+) scanf(M%d,&ai);for (mt i=0;i<n/2:i+) ai=an-l-i; an-l-i=t;scaiif(H%dH. &m);retiini(O);2. 交换最小值和最大值本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最 后一个数交换,最后输岀交换后的序列。注意
3、:题目保证最大和最小值都是唯一的。输入格式:输入在第一行中给岀一个正整数N (W10),第二行给出N个整数,数字间以空格分隔。 输出格式:在一行中顺序输出交换后的序列,每个整数后跟一个空格。输入样例:582 5 1 4输出样例:1 2 548(1) 编程思路。在数组中找最大值和最小值的方法是:先认为第1个元素班0的值既是最大值也是最小 值,即max=nun=0 (注意:此处保留的是最大值与最小值的下标)。之后用循环对剩下的 N-1个元素进行遍历。若元素晅比最大值amax±,更新最大值下标max;若元素ai比 最小值annn小,更新最小值下标min。找到最大值下标max和最小值下标mi
4、n后,按要求进行元素交换即可。(2) 源程序。弄include <stdio.h>#include <matli.h>mt mam ()int n;scaiif(”dl&n);int a10;int i;for (i=0;i<n;i+) scanf(H%d&ai);int inuii=O.maxi=O;for (i=l ;i<n;i+)if (aimni>ai) mmi=i;if (ainaxi<aij) maxi=i;int t;t=aO; aO=ammi; amim=t;if (maxi=O) niaxi=imni;t=an-
5、l; an-l=amaxi; amaxi=t;for (mt i=O;i<n;i+)prmtf(H%d ai);pruitf(uW*);renim(O);3. 简化的插入排序本题要求编写程序,将一个给立的整数插到原本有序的整数序列中,使结果序列仍然有序。 输入格式:输入在第一行先给出非负整数N (vlO);第二行给出N个从小到大排好顺序的整数:第三 行给出一个整数X。输出格式:在一行内输出将X插入后仍然从小到大有序的整数序列,每个数字后而有一个空格。输入样例:51 245 73输出样例:123457(1)编程思路。要将整数x插入到有序序列a0an-l中,采用如下的循环找到一个插入位置并插
6、入x 即可。找插入位置时,从后往前找,若当前元素值大于x,则该元素向后移,留出插入的位 置。for (i=n-l;i>=0;i)if(ai>x) ai+l=ai;else break:ai+l=x;(2)源程序。#include <stdio.h>#include <matli.h>mt mam ()int n;scaiif(n%dM.&n);int all;int i;for (i=O;i<n;i+)scanf(n%d,&ai);int x;scaiif(n%dr&k);for (i=n-l;i>=O;i)if(ai&g
7、t;x) ai+l=ai;else break;ai+l=x;for (mt i=0;i<=n;i+)prmtf(H%d ai);pdntffW);retiim(O);4. 求整数序列中出现次数最多的数本题要求统汁一个整型序列中岀现次数最多的整数及英出现次数。输入格式:输入在一行中给岀序列中整数个数N (XNW1000),以及N个整数。数字间以空格分隔。输出格式:在一行中输出岀现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字 是唯一的。输入样例:10 32-1 5343032输出样例:34(1) 编程思路。左义数组mt a1000;保存输入的N个整数,先用冒泡排序对数组
8、a按从小到大的顺序 排序,这样,相同的整数在数组中一定连续存放。为求得出现次数最多的整数ansnum及其岀现次数ans,对数组a进行遍历。初始时,置ans= 1 ,aasnum=aO,niun=aO,cnt= 1;,表示a0出现次数最多,次数为1,当 前数num为a0,有cnt=l个°之后用一重循环for(i=l;i<n:i+)对数组的其他元素进行遍历,对每个元素ai若ai=num,表示当前数又出现一次,计数cnt+;若ai!=num,当前数num不会再岀现了,若num出现的次数最多,更新出现次数最多 的整数ansmun=num及其出现次数ans=cnt:之后宜num=a i,
9、 cnt= 1, ai称为新的当前数, 出现了 1次。(2) 源程序。include vst&o.h>#include <math.h>mt mam ()int n;scanf(H%dH.&n);int a1000;intfor (i=0;Kn;i+)scanf(”&',&ai);for (i=0;i<n-l;i+)for (j=O;j<n-l-i;j+)if(aj>aU+l)t=aj; aj=aj+l; aj+l=t;int ans= 1、ansnum=a 0 jium=a 0 ,cnt= 1;for (i=l;i&
10、lt;n;i+)if (ai!=num)if (ans<cnt)ans=cnt; aasnum=num; cnt=l; num=ai;elsecnt+;if (ans<cnt)ans=cnt; ansnum=num;printf(H%d %dnH. aiisnuni, ans):retiim(O);5. 査询水果价格给泄四种水果,分别是苹果(appl亡)、梨(pear)、桔子(orange)、匍萄(grap亡),单价分别 对应为3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。首先在屏幕上显示以下菜单:1 apple2 pear3 orange4 grape
11、0 exit用户可以输入编号14查询对应水果的单价。当连续査询次数超过5次时,程序应自动退岀 査询:不到5次而用户输入0即退岀;输入貝他编号,显示价格为0。输入格式:输入在一行中给岀用户连续输入的若干个编号。输出格式:首先在屏幕上显示菜单。然后对应用户的每个输入,在一行中按格式“pnce =价格”输岀 査询结果,英中价格保留两位小数。当用户连续查询次数超过5次、或主动输入0时,程序 结束。输入样例1:3-102输出样例1:1 apple2 pear3 orange4 grape0 exitprice = 4.10price = 0.00输入样例2:1233445678输出样例2:1 apple
12、2 pear3 orange4 grape0 exitprice = 3.00price = 2.50price = 4.10price = 4.10price = 10.20(1) 编程思路。定义数组 double price5=0.00,3.00,2.50,4.10,10.20;-存四种水果的价格,其中 pncei 保存第1种(尸14)水果的价格。定义数组mt a5保存输入的最多5次査询,对每次査询ai,若ai为14之一,则对 应输出priceai:否则输出0.00。(2) 源程序。include <stdio.h>int main ()int xji=0;int a5J;wh
13、ile (1)scanf(n%d,&x);if(x=0) break:an+=x;if (n=5) break;prmtf(ol applen2 pearn3 orangeii4 grapen0 exit'u”);double price5=0.00,300,2.50,4.10,10.20;for (int i=0;i<n;i+)if(ai>=l && ai<=4)prmtfCpnce = %.2firpriceai);elseprmtf(°price = 0.00'nH);renim(O);6. 猴子选大王一群猴子要选新猴王
14、。新猴王的选择方法是:让N只候选猴子国成一圈,从某位置起顺序 编号为1N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又 从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请 问是原来第几号猴子当选猴王?输入格式:输入在一行中给一个正整数N (W1000)。输出格式:在一行中输出当选猴王的编号。输入样例:11输出样例:7(1) 编程思路。为输出出圈顺序,采用一个数组来进行模拟。泄义mtcircleN+l,并按circlei=i+l的方式赋予各元素初值。该值代表两个含义:1) 值为0,代表编号】+1的猴子不再圈中:2)值非0,代表圈中第】个位置的
15、猴子编号为1+1。迫义变量i代表报数位置的流动,i的初值为0,代表编号为1的猴子的位置,I的变化 方式为:i=(i+l)%(n)» 即 0>1>2->n-l ->0>1。1流动到了位程i后,该位巻的猴子若已出圈(circlei=O),显然无法报数,得跳过该 位置:若该位程的猴子在圈中,则报数(泄义一个表示报数的变量p,初值为0,每次报数 p+)。当报数到3(即p=3)时,位巻1的猴子出圈,记录岀圈猴子数cnt+,同时p置为0。 当出圈猴子数等于n时循环结朿。迫义变量last记录最后获胜者编号,不输出中间过程。显然,if(cnt=n) last=circl
16、ei.(2) 源程序。include <stdio.h>mt main()mt n4,p,cnt,last;iiit circle1000;scaiif(H%d,&n);for (i=O;i<n;i+)circlei=i+l;1=0;/报数指示P=o;/报数计数器cnt=0; /出圈猴子数while (cnt<n)if (circlei?=0) p+;if(P=3)cnt+;if (cnt=n) last=circlei;circlei=0;p=0:i=(i+l)%(n);printf(H%dnH,last);return 0;7. 矩阵运算给泄一个nXn的方阵
17、,本题要求计算该矩阵除副对角线、最后一列和最后一行以外的所有 元素之和。副对角线为从矩阵的右上角至左下角的连线。输入格式:输入第一行给岀正整数n(lvnW10);随后n行,每行给出n个整数,英间以空格分隔。输出格式:在一行中给出该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。输入样例:423 4 156 117 18 1ini输出样例:35(1) 编程思路。泄义二维数组mta1010;(X存输入的n*n方阵。采用二重循环for (i=O;i<n-l;i+)for (j=O;j<n-l;j-H-) 对矩阵中除最后一行和最后一列以外的所有元素aij进行遍历,在求和时,不能累加
18、副对角线上的元素值,副对角线上的元素满足条件i+j=n-lo(2) 源程序。include <stdio.h>mt mam ()intn;mta1010; scaiif(H%dM.&n); int i,j;for (i=O;i<n;i+)for G=0;j<n;j+) scanf(H%d&aij); int sum=0;for (i=0;i<n-l;i+)for (j=O;j<n-l;j+) if (i+j!=n-l) sum+=aij; printf(H%d'ii,sum): retiini(O);8. 求矩阵的局部极大值给泄M行N
19、列的整数矩阵A,如果A的非边界元素Aij大于相邻的上下左右4个元素, 那么就称元素AiD是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的 位置。输入格式:输入在第一行中给出矩阵A的行数M和列数N (3WM,NW20);最后M行,每行给岀A 在该行的N个元素的值。数字间以空格分隔。输出格式:每行按照"元素值行号列号”的格式输出一个局部极大值,其中行、列编号从1开始。要 求按照行号递增输出:若同行有超过1个局部极大值,则该行按列号递增输出。若没有局部 极大值,则输岀“None总行数总列数”。输入样例1:45111111 3 9 3 11 5 3 5 111111输出样例1:
20、923532534输入样例2:35111119 3 99 11 5 3 5 1输出样例2:None 3 5(1) 编程思路。泄义二维数组mta2121:保存矩阵A,由于题目中行、列编号从1开始,因此输入的 矩阵保存在二维数组中时,数组元素行和列的下标也从1开始,即a00a020. al0al20样的元素空置不用即可。对于M行N列的整数矩阵A,用二重循环for (i=2;i<M;i+)for (j=2;j<N;j+) 对每个非边界元素aij进行遍历,若该元素均大于其上(ai-lj)、下Qi+lj)、左 (aij-l).右(aij+l)的4个元素,则计数并输出该元素中及其行列编号。(2
21、) 源程序。include <stdio.h>mt mam ()int m5n;inta2121;scaiif(M%d %dl&m、&n);int i,j;for (i=l ;i<=m;i+)for (j=l;j<=n:j+)scanf(H%d&aij);int cnt=O;for (i=2;i<m;i+)for (j=2;j<n;j+)if(aij>ai-lj && aij>ai+lj && aij>aij-l && aij>aij+l)printf("
22、;%d %d %dn,aij4j);cut 卄;if (cnt=0)prmtf(HNone %d %d'.nm,n);retiim(O);9. 统计不及格人数有4名学生,每名学生有4门课程,编写程序,要求输入所有学生的成绩,然后统计每门课 不及格的人数。输入格式:输入4需学生的4门课程到二维数组a44,数据之间用一个空格分隔,每输入4个数, 敲回车,成绩为整数。输出格式:在一行中输出每列数据中小于60的个数,即不及格人数,每个数拯后有一个空格。输入样例:在这里给出一组输入。例如:86 54 78 9061 50 60 4530 90 70 8580 85 75 96输出样例:在这里给出
23、相应的输出。例如:1201(1) 编程思路。左义二维数组mta44;保存4名学生的4门课程的成绩。采用二重循环for (i=0;i<4;i+)for (j=0;j<4;j-H-) 对二维数组中的各元素进行遍历。(2) 源程序。include <stdio.h>int mam ()inta44;int i,j;for (i=0;i<4;i+)for (j=0;j<4;j-H-)for (j=0;j<4;j+)int cnt=0;for (i=0;i<4;i+)if(aij<60)cnt+;printf(H%d M,cnt);retiim(O)
24、;10.字符串替换本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换: 原字母对应字母AZBYCXDWZA输入格式:输入在一行中给岀一个不超过80个字符、并以回车结束的字符串。输出格式:输出在一行中给岀替换完成后的字符串。输入样例:Only the 11 CAPItaL LeTtERS are replaced.输出样例:Lilly the 11 XZKRtaO OeGtVTH are replaced.(1) 编程思路。上义数组char str81;保存输入的字符串,由样例可知,输入的字符串中含有空格,因 此采用gets (str)输入字符串,不能采用scauf(“s”,str
25、)输入字符串。用循环for (i=0;stri!=r0,;i+)对字符串中的每个字符进行遍历,对遍历的每个字符, 若为答谢字母(if(stri>=A && stri<='Z'),则按替换规则进行转换,可用表达式简单 描述为:stri=Z,-(stri-'A,);。(2) 源程序。include <stdio 11>mt main()char str81:iiit i;gets(str);for (i=0;stri!=,0,;i+)if (stri>=A && striv=Z)stri=Z-(striA'
26、;);printf("%sn",str);retiim 0;11.组个最小数给泄数字0-9备若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最 后得到的数尽可能小(注意0不能做首位)。例如:给泄两个0,两个1,三个5, 个8, 我们得到的最小的数就是10015558。现给左数字,请编写程序输出能够组成的最小的数。输入格式:输入在一行中给岀10个非负整数,顺序表示我们拥有数字0、数字1、数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。输出格式:在一行中输出能够组成的最小的数。输入样例:2200030010输出样例:1
27、0015558(1) 编程思路。泄义数组mta10,其中元素ai的值表示数字1出现的次数。因为数的最髙位不能为0,先在alba9之间找一个最小的元素值不为0的元素ai, 输出1,然后ai=ai-l (表示数字1在最髙位已用了一个)。之后,采用如下的二重循环,按数字09使用的个数,依次输出对应个数的数字,这 样得到的数一定是最小数。for (i=0;i<10;i+)forG=l;J<=ai;j+)(2) 源程序。include <stdio.li>nit main()mt a10,ij;for (i=0;K10;i+)scanfC%dH,&ai);for (i=l;K10;i+)if(ai?=0) br
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论