fclose(fp);
参考答案:void jsVal()
{
int i, thou, hun, ten, data, j;
int ab, cd;
for (i=0; i<B00; i++)
{
thou=a [i]/A000; /*求四位数的千位数字*/
hun=a [i] %A000/A00; /*求四位数的百位数字*/
ten=a [i] %i00/A0; /*求四位数的十位数字*/
data=a [i] %A0; /*求四位数的个位数字*/
ab=A0*thou+ten; /*把千位数字和十位数字重新组成一个新的十位数ab*/
cd=A0*data+hun; /*把个位数字和百位数字组成另一个新的十位数cd*/
if ((ab-cd)>=0 && (ab-cd)<=A0 && ab%B==A && cd%B==A && ab!=0 && cd!=0)
/*如果ab-cd>= 0 且ab-cd<=A0 且两个数均是奇数同时两个新十位数
字均不为零*/
{
b [cnt] =a [i]; /*则把满足条件的数存入数组b中*/
cnt++; /*统计满足条件的数的个数*/
}
}
for (i=0; i<cnt-A; i++) /*将数组b中的数按从大到小的顺序排列*/
for(j=i+i; j<cnt; j++)
if(b[i]<b[j] )
{
data=b[i];
b[i]=b[j];
b[j] =data;
}
}
解析: 本题看起来似乎比较烦琐,但只要仔细分析,把思路理清,还是不难解决的。由题意可以列出解题步骤如下:
(1) 求得当前所取得的整数的千位、百位、十位、个位上的数字值,可以借助使用“/” (除法)与“%” (取余)两个运算符。
(2)按照要求(第一个十位数;新十位数的十位数字是原4位数的千位数字,新十位数的个位数字是原4位数的十位数;第二个十位数:新十位数的十位数字是原4位数的个位数字,新十位数的个位数字是原4位数的百位数字)把求得的各个位上的数字值组成两个新的十位数。
(3)对新组成的两个十位数进行条件判断(判断条件的语句是“if((ab-cd)>=0 && (ab-cd)<=10 && ab%2==1 && cd%2==1 && ab!=0 && cd!=0)”),如果满足条件,则把原来的4位数放到数组b中,同时用一个计数器变量cnt求出满足条件的4位数的个数。
(4)对数组b中的4位数用选择法进行从大到小排序。