输入若干个自然数,对奇数从大到小排序对偶数从小到大排序,输出两种结果。
#include<stdio.h>
#include<math.h>
int Judge(int n){ //判断奇数偶数
if(n%2==0){
return 0;
}
return 1;
}
int sort(int a[]){//对奇数和偶数分别冒泡排序
int i,j,m,n;
int a[99],b[99];
int count,count1;
if(Judge==1){//这里想用Judge函数把输入的数字区分开 但是这样写不对呜呜
count++;
for(i=0;i<count;i++){
scanf("%d",&a[i]);//想把奇数存在数组里然后排序
}
for(i=0;i<count-1;i++){
for(j=0;j<count-i-1;j++){
if(a[j]<a[j+1]){
int temp;
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
for(i=0;i<count;i++){
printf("%d",a[i]);
}
}
if(Judge==0){
count1++;
for(m=0;m<count1;m++){
scanf("%d",&b[m]);//想把偶数存入数组里然后排序
}
for(m=0;m<count1-1;m++){
for(n=0;n<count1-i-1;n++){
if(b[n]>b[n+1]){
int temp;
temp=b[n];
b[n]=b[n+1];
b[n+1]=temp;
}
}
for(m=0;m<count;m++){
printf("%d",m[i]);
}
}
int main(){
int x;
printf("请输入数据个数");
scanf("%d",&x);
printf("请输入一串数");
for(int i=0;i<x;i++){
scanf("%d",&a[i]);
}
Judge(a[]);//这里想调用但不知道怎么用上面那两个函数
sort(a[]);
return 0;
}
对你的代码修改如下
#include <stdio.h>
#include <math.h>
int Judge(int n)
{ //判断奇数偶数
if (n % 2 == 0)
{
return 0;
}
return 1;
}
int sort(int a[], int x)
{ //对奇数和偶数分别冒泡排序
int i, j, m, n;
int b[99], c[99];
int count = 0, count1 = 0;
for (i = 0; i < x; i++)
if (Judge(a[i]))
b[count++] = a[i];
else
c[count1++] = a[i];
for (i = 0; i < count - 1; i++)
{
for (j = 0; j < count - i - 1; j++)
{
if (b[j] < b[j + 1])
{
int temp;
temp = b[j];
b[j] = b[j + 1];
b[j + 1] = temp;
}
}
}
for (i = 0; i < count; i++)
{
printf("%d ", b[i]);
}
for (i = 0; i < count1 - 1; i++)
{
for (j = 0; j < count1 - i - 1; j++)
{
if (c[j] > c[j + 1])
{
int temp;
temp = c[j];
c[j] = c[j + 1];
c[j + 1] = temp;
}
}
}
for (i = 0; i < count1; i++)
{
printf("%d ", c[i]);
}
}
int main()
{
int x;
int a[100];
printf("请输入数据个数");
scanf("%d", &x);
printf("请输入一串数");
for (int i = 0; i < x; i++)
{
scanf("%d", &a[i]);
}
sort(a, x);
return 0;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
你代码的逻辑有问题。
应该先读取所有数。
然后用一个for循环对这个数列进行筛选。分别分为偶数列 和 奇数列
然后对偶数列和奇数列排序。
#include<stdio.h>
#include<math.h>
#include <algorithm>
using namespace std;
#pragma warning(disable:4996)
int main() {
int arrs[1000];
int odds[1000];
int odd_length = 0;
int evens[1000];
int even_length = 0;
for (int i = 0; i < 10; i++) {
scanf("%d", &arrs[i]);
if (arrs[i] % 2 == 1) {
odds[odd_length++] = arrs[i];
}
else {
evens[even_length++] = arrs[i];
}
}
for (int i = 0; i < odd_length; i++) {
for (int j = i+1; j < odd_length; j++) {
if (odds[i] < odds[j]) {
swap(odds[i], odds[j]);
}
}
}
for (int i = 0; i < even_length; i++) {
for (int j = i + 1; j < even_length; j++) {
if (evens[i] < evens[j]) {
swap(evens[i], evens[j]);
}
}
}
for (int i = 0; i < odd_length; i++) {
printf("%d ", odds[i]);
}
for (int i = 0; i < even_length; i++) {
printf("%d ", evens[i]);
}
}
从小到大。就是把双for循环的排序函数。判断要交替的地方。把小于号改成大于号。
#include<stdio.h>
#include<math.h>
int Judge(int n)
{ //判断奇数偶数
if(n%2==0)
{
return 0;
}
else
{
return 1;
}
}
int sort(int a[],int n2)
{ //对奇数和偶数分别冒泡排序
int j,k,m=0,n=0;
int c1[n2],c2[n2];
int count,count1;
for(j=0; j<n2; j++)
{
if(Judge(a[j])!=0)
{
c1[m]=a[j];
m++;
}
else
{
c2[n]=a[j];
n++;
}
}
for(k=0; k<m; k++)
{
for(j=0; j<m-k-1; j++)
{
if(c1[j]<c1[j+1])
{
int temp;
temp=c1[j];
c1[j]=c1[j+1];
c1[j+1]=temp;
}
}
}
for(k=0; k<m; k++)
{
printf("%d",c1[k]);
}
printf("\n");
for(k=0; k<n; k++)
{
for(j=0; j<n-k-1; j++)
{
if(c2[j]>c2[j+1])
{
int temp;
temp=c2[j];
c2[j]=c2[j+1];
c2[j+1]=temp;
}
}
}
for(k=0; k<n; k++)
{
printf("%d",c2[k]);
}
printf("\n");
}
int main()
{
int x;
printf("请输入数据个数");
scanf("%d",&x);
printf("请输入一串数");
int k;
int a[x];
for(k=0; k<x; k++)
{
scanf("%d",&a[k]);
}
//Judge(a[]);//这里想调用但不知道怎么用上面那两个函数
sort(a,x);
return 0;
}