1、第18类 选票问题 93-95第19类 出圈问题 96第20类 97-104第一类 按揭偶体系成员筛选并排序1【解题思路】本题是结构体排序题。结构体是由一系列数据构成的数据集合,可以当做通用的数据类型来处理,如两个结构体之间可以使用等号直接赋值。使用.符号可以直接调用结构体中封装的数据,本题中单价、数量、金额都是数值,可以直接比较,名称和代码则是字符串,需要使用strcmp函数来比较。本题要求进行两重排序,但在使用选择法或冒泡法进行排序时,可以通过适当的判断条件在一次循环中完成两重排序。根据题意,应使用判断语句:if(strcmp(selli.mc,sellj.mc)0|strcmp(sell
2、i.mc,sellj.mc)=0&selli.jesellj.je)【参考答案】void SortDat() int i,j; PRO temp; for(i=0;iMAX-1;i+) for(j=i+1;j0 |strcmp(selli.mc,sellj.mc)=0& temp=selli; selli=sellj; sellj=temp; 2 if(strcmp(selli.mc,sellj.mc)selli.je0 |strcmp(selli.dm,sellj.dm)=0&4 if(selli.jesellj.je |selli.je=sellj.je&strcmp(selli.dm,s
3、ellj.dm)7 if(strcmp(selli.dm,sellj.dm)sellj.je|selli.je=sellj.je& if(selli.je10【解题思路】本题是结构体排序题。strcmp(selli.dm,sellj.dm)第二类型数位分解后按数筛选并统计11【解题思路】本题要求将已知数按十进制位拆分后,依照一定的判断条件筛选统计后再按大小进行排序。依照题意,应从数组a中依次取出每一个四位数,按十进制位拆分后,按题干中给出的判断条件(四位数的千位数上的数加个位数上的数等于百位数上的数加十位数上的数,即a4+a1=a3+a2)筛选后,符合条件的四位数存入数组b中,同时计数器变量c
4、nt加1,最后用选择法将数组b中的四位数排序。其中,将数按数位拆分可以通过整型变量的除法和取余运算完成:如一个整型变量除以10,相当于该数舍去最右一位,左边的所有位则向右移动一位,除以100则相当于舍去最右两位,除以10的整数次方时,后面有几个0(即是10的多少次方)就是舍去最右几位;一个整型变量除10取余,则相当于保留最右一位舍去左边其他位,除100取余则相当于保留最右两位舍去其他位,依次类推,后面有几个0就是保留最右几位。因此数位拆分可以当做一个舍去两边留下中间一位的过程,以百位数为例,先舍左后舍右就是a3=ai%1000/100,先舍右后舍左则是a3=ai/100%10。最高位和最低位(
5、个位)只有一侧有数字,因此算法可以简化,只需要一次运算即可。void jsValue() int a1,a2,a3,a4; int temp;300;i+) a1=ai%10; a2=ai%100/10; a3=ai%1000/100; a4=ai/1000; if(a4+a1=a3+a2) bcnt+=ai;cnt-1;cnt; if(bibj) temp=bi; bi=bj; bj=temp;12【解题思路】本题要求将已知数按十进制位拆分后,依照一定的判断条件筛选统计后再按大小进行排序。依照题意,应从数组a中依次取出每一个四位数,按十进制位拆分后,按题干中给出的判断条件(四位数各位上的数字
6、均是奇数,即a1%2=1&a2%2=1&a3%2=1&a4%2=1)筛选后,符合条件的四位数存入数组b中,同时计数器变量cnt加1,最后用选择法将数组b中的四位数排序。void jsVal() if(a1%2=1&a4%2=1) if(bi13【解题思路】本题要求将已知数按十进制位拆分后,依照一定的判断条件筛选统计后再按大小进行排序。依照题意,应从数组a中依次取出每一个四位数,按十进制位拆分后,按题干中给出的判断条件(四位数的千位数上的数加百位数上的数等于十位数上的数加个位数上的数,即a4+a3=a2+a1)筛选后,符合条件的四位数存入数组b中,同时计数器变量cnt加1,最后用选择法将数组b中
7、的四位数排序。jsValue() if(a4+a3=a2+a1) 14【解题思路】本题要求将已知的两个两位数依照一定的判断条件筛选后重组成一个新数再按大小进行排序。依照题意,应从数组a和b中分别依次取出每一个两位数,按题干中给出的判断条件(相同下标位置的数必须符合一个是偶数,另一个是奇数,即ai%2=1&bi%2=0|ai%2=0&bi%2=1)筛选后,按题干要求的计算方式(数组a中的数按二进制数左移八位后再加上数组b对应位置上的数,即(ai8)+bi)生成一个新的数存入数组c中,最后用选择法将数组c中的四位数排序。 if(ai%2=1&bi%2=1) ccnt+=(aicj) temp=ci
8、; ci=cj; cj=temp;15【解题思路】本题要求将已知数按十进制位拆分后,依照一定的判断条件筛选统计后再按大小进行排序。依照题意,应从数组a中依次取出每一个四位数,按十进制位拆分后,按题干中给出的判断条件(四位数的千位数上的数减百位数上的数减十位数上的数减个位数上的数大于零,即a4-a3-a2-a10)筛选后,符合条件的四位数存入数组b中,同时计数器变量cnt加1,最后用选择法将数组b中的四位数排序。 if(a4-a3-a2-a10) 16【解题思路】本题要求在所有的四位素数中按十进制位拆分后依照一定的判断条件筛选后统计求和。依照题意,应该逐个处理每一个四位数,将其按十进制位拆分后,
9、选出既是素数又符合题干中给出的判断条件(千位数字与百位数字之和等于十位数字与个位数字之和,且千位数字与百位数字之和等于个位数字与千位数字之差的正10倍,即a4+a3=a2+a1&a4+a3=(a1-a4)*10)的数,统计个数并求和。检验一个数是否是素数时,可用从2开始并小于目标数的自然数依次去除目标数,若余数为0则跳出循环,若余数皆不为0,则说明目标数是素数。void countValue() for(i=1000;=9999; a1=i%10; a2=i%100/10; a3=i%1000/100; a4=i/1000; for(j=2;i; if(i%j=0) break; if(j=i
10、&a4+a3=a2+a1&a4+a3=(a1-a4)*10) cnt+; sum+=i;17【解题思路】本题要求将已知数按十进制位拆分后,依照一定的判断条件筛选统计后再按大小进行排序。依照题意,应从数组a中依次取出每一个四位数,按十进制位拆分后,按题干中给出的判断条件(四位数各位上的数字均为0或2或4或6或8中的一个数字,可以等效为各位上的数字均为偶数,即a1%2=0&a2%2=0&a3%2=0&a4%2=0)筛选后,符合条件的四位数存入数组b中,同时计数器变量cnt加1,最后用选择法将数组b中的四位数排序。 if(a1%2=0&a4%2=0) 18【解题思路】本题要求将已知数按十进制位拆分后
11、,依照一定的判断条件筛选统计后再按大小进行排序。依照题意,应从数组a中依次取出每一个四位数,按十进制位拆分后,按题干中给出的判断条件(四位数的个位数上的数减千位数上的数减百位数上的数减十位数上的数大于零,即a1-a4-a3-a2 if(a1-a4-a3-a219【解题思路】本题要求将已知数按十进制位拆分后,依照一定的判断条件筛选统计后再按大小进行排序。依照题意,应从数组a中依次取出每一个四位数,按十进制位拆分后,按题干中给出的判断条件(四位数的千位数位置上的值减去百位数位置上的值再减去十位数位置上的值最后减去个位数位置上的值,如果得出的值大于等于零且原四位数是奇数,即a4-a3-a2-a1=0
12、&ai%2=1)筛选后,符合条件的四位数存入数组b中,同时计数器变量cnt加1,最后用选择法将数组b中的四位数排序。ai%2=1) 20【解题思路】本题要求将已知数按十进制位拆分后,依照一定的判断条件筛选统计后再按大小进行排序。依照题意,应从数组a中依次取出每一个四位数,按十进制位拆分后,按题干中给出的判断条件(四位数的千位数位置上的值大于等于百位数位置上的值,百位数位置上的值大于等于十位数位置上的值,以及十位数位置上的值大于等于个位数位置上的值,并且原四位数是奇数,即a4=a3&a3=a2&a2=a1& if(a421【解题思路】本题要求将已知数按十进制位拆分后,依照一定的判断条件筛选统计后再按大小进行排序。依照题意,应从数组a中依次取出每一个四位数,按十进制位拆分后,按题干中给出的判断条件(四位数的千位数位置上的值加上个位数位置上的值恰好等于百位数位置上的值加上十位数位置上的值,并且原四位数是奇数,即a4+a1=a3+a2& if(a4+a1=a3+a2&22【解
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1