题解:
- 题目中输入的a有可能为负数,这时就不能用"a%2 == 0"和"a%2 == 1"来判断奇偶性了,负奇数对2取余的值为-1,但有偶数对2取余恒为0,所以可以用"a%2 == 0"和"!(a%2 == 0)来判断奇偶,取余的值不是0的就是奇数
题目:
问题 D: 分类排序
时间限制: 1 Sec 内存限制: 128 MB
提交: 838 解决: 239
[提交][状态][讨论版]
题目描述
从键盘输入10个整数(10个整数均不相同), 然后再从键盘中输入一个整数a,如果该整数a为奇数, 且与这10个整数中的任一个数相同,则删掉与a相同的 这个数,并将剩下的9个数按升序排序输出;若a为偶数, 且与这10个数都不同,则加入a,并将这11个数降序排 序输出;否则,则将这10个数奇数在前,偶数在后, 降序排列输出。例如,10个数分别为6,89,34,12, 0,-8,78,15,9,3.若a为9,则输出为:-8,0,3, 6,12,15,34,78,89.若a为2,则输出为:89,78, 34,15,12,9,6,3,2,0,-8.若a为7或者12,则 输出为:89,15,9,3,78,34,12,6,0,-8.
输入
测试数据的组数n 第一组测试数据的10个整数 第一组的整数a 第二组测试数据的10个整数 第二组的整数a ...... 第n组测试数据的10个整数 第n组的整数a
输出
第一组数据排序输出 第二组数据排序输出 ....... 第n组数据排序输出
样例输入
3
6 89 34 12 0 -8 78 15 9 3
9
6 89 34 12 0 -8 78 15 9 3
2
6 89 34 12 0 -8 78 15 9 3
7
样例输出
-8 0 3 6 12 15 34 78 89
89 78 34 15 12 9 6 3 2 0 -8
89 15 9 3 78 34 12 6 0 -8
代码块:
#include <iostream>
using namespace std;
int main()
{
int i, j, k, temp, t;
cin>>t;
while(t--)
{
int i, b;
int a[11];
for(i=0; i<10; i++)
cin>>a[i];
cin>>b;
if(b%2==0)
{
for(i=0; i<10; i++)
{
if(b==a[i])
break;
}
if(i==10)
{
a[10] = b;
for(j=0; j<10; j++)
{
for(k=0; k<10-j; k++)
{
if(a[k]<a[k+1])
{
temp = a[k];
a[k] = a[k+1];
a[k+1] = temp;
}
}
}
for(j=0; j<11; j++)
{
if(j!=10)
cout<<a[j]<<' ';
else
cout<<a[j]<<endl;
}
}
else
{
j = 0;
k = 9;
while(j<k)
{
if(a[j]%2==0 && !(a[k]%2==0))
{
temp = a[j];
a[j] = a[k];
a[k] = temp;
}
else if(a[j]%2==0 && a[k]%2==0)
k--;
else if(!(a[j]%2==0) && !(a[k]%2==0))
j++;
else
{
j++;
k--;
}
}
for(i=0; i<10; i++)
{
if(a[i]%2==0)
break;
}
for(j=0; j<i-1; j++)
{
for(k=0; k<i-1-j; k++)
{
if(a[k]<a[k+1])
{
temp = a[k];
a[k] = a[k+1];
a[k+1] = temp;
}
}
}
for(j=i; j<9; j++)
{
for(k=i; k<9-j+i; k++)
{
if(a[k]<a[k+1])
{
temp = a[k];
a[k] = a[k+1];
a[k+1] = temp;
}
}
}
for(j=0; j<10; j++)
{
if(j!=9)
cout<<a[j]<<' ';
else
cout<<a[j]<<endl;
}
}
}
else
{
for(i=0; i<10; i++)
{
if(b==a[i])
break;
}
if(i==10)
{
j = 0;
k = 9;
while(j<k)
{
if(a[j]%2==0 && !(a[k]%2==0))
{
temp = a[j];
a[j] = a[k];
a[k] = temp;
}
else if(a[j]%2==0 && a[k]%2==0)
k--;
else if(!(a[j]%2==0) && !(a[k]%2==0))
j++;
else
{
j++;
k--;
}
}
for(i=0; i<10; i++)
{
if(a[i]%2==0)
break;
}
for(j=0; j<i-1; j++)
{
for(k=0; k<i-1-j; k++)
{
if(a[k]<a[k+1])
{
temp = a[k];
a[k] = a[k+1];
a[k+1] = temp;
}
}
}
for(j=i; j<9; j++)
{
for(k=i; k<9-j+i; k++)
{
if(a[k]<a[k+1])
{
temp = a[k];
a[k] = a[k+1];
a[k+1] = temp;
}
}
}
for(j=0; j<10; j++)
{
if(j!=9)
cout<<a[j]<<' ';
else
cout<<a[j]<<endl;
}
}
else
{
for(j=i; j<9; j++)
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
for(j=0; j<8; j++)
{
for(k=0; k<8-j; k++)
{
if(a[k]>a[k+1])
{
temp = a[k];
a[k] = a[k+1];
a[k+1] = temp;
}
}
}
for(j=0; j<9; j++)
{
if(j!=8)
cout<<a[j]<<' ';
else
cout<<a[j]<<endl;
}
}
}
}
}