任何人都可以提供帮助。我必须编写一个程序,让用户输入10个数字。并以奇数(升序)和偶数(降序)对这些数字进行排序。
例如: 输入:2,8,7,13,23,9,34,11,1,16 输出:1,7,9,11,13,23,34,16,8,2
我必须在没有任何方法的情况下这样做,例如Array.Sort。
到目前为止,这是我的代码:
Console.WriteLine("Input 10 numbers: ");
int[] number = new int[10];
for (int i = 0; i < number.Length; i++) {
number[i] = int.Parse(Console.ReadLine());
if (number[i] == 0) {
Console.WriteLine("input of 0 is not alllowed!");
break;
}
}
//EVEN NUMBERS
for (int i = 0; i < number.Length; i++) {
if (number[i] % 2 == 0) {
Console.Write("{0} ", number[i]);
}
}
//ODD NUMBERS
for (int i = 0; i < number.Length; i++) {
if (number[i] % 2 != 0) {
Console.Write("{0} ", number[i]);
}
}
我只需要知道如何做到这一点。
答案 0 :(得分:2)
您可以实现各种好的排序算法,我不会进入这个算法,因为这有点偏离您的问题主题,但是here's a link到描述其中许多算法的页面。
使用任何排序算法解决问题的关键是具有良好的比较功能,可以告诉您值应显示的顺序。在您的情况下,该比较的重要规则是: 奇怪应该永远在前 2.较低的奇数应该在较高的奇数之前 3.更高的偶数应该在低偶数之前
因此,您的比较函数可能类似于以下内容(注意:我不会以这种方式正常命名函数或参数,但这使得此示例更加清晰)
public bool AComesBeforeB(int a, int b)
{
if(IsOdd(a))
{
if(IsOdd(b))
{
return a < b;
}
else
{
return true;
}
}
else
{
if(isOdd(b))
{
return false;
}
else
{
return a > b;
}
}
}
或者你可以像yyttr3推荐的那样做,并将偶数和奇数分成不同的数组,然后从那里排序。我不喜欢这样做,因为它需要更多的代码和更多的内存,但它基本上也是如此。
还有一些与您的问题没有直接关系的笔记:
如果有人输入0(提示,它没有正确运行),请查看会发生什么情况
根据您的代码和示例输入,您假设输入将始终是一系列整数,如果用户输入带小数的数字会发生什么?还是按字母顺序排列? (提示:异常会导致程序崩溃)
确保您的程序处理负数,因为它现在我不知道为什么它不会,但在处理数字输入时,这总是一个很好的测试
这看起来像是一项家庭作业,虽然可以就问题的具体部分寻求建议和帮助,但不要试图用SO为你做功课,要清楚我不认为你这样做,但Rariolu的答案基本上是给你代码批发,如果作为你自己的作品提交可以被认为是plagerism
当你说你想做这个&#34;没有任何方法&#34;时,就会误解对方法的误解。这段代码本身就是在一个方法中运行的,为了以清晰易懂的方式编写这段代码,你需要编写自己的方法,你可以从main方法调用它们。我认为你真正要说的是&#34;我不必使用通常用于排序的C#库方法&#34;。
答案 1 :(得分:0)
这应该有效:(请记住&#34;数字&#34;是一个包含所有数字的数组。
List<int> oddnumbers = new List<int>();
List<int> evennumbers = new List<int>();
foreach(int number in numbers)
{
if(numer % 2 == 0)//If number is divisible by 2(is even)
{
evennumbers.Add(number);
}
else//If number is not divisible by 2(is odd)
{
oddnumbers.Add(number);
}
}
evennumbers = evennumbers.Sort();
oddnumbers = oddnumbers.Sort();//Sort both lists so that they values are in ascending order.
evennumbers = evennumbers.Reverse();//Reverse the items in "evennumbers" into descending order.
List<int> newnumbersequence = new List<int>();
foreach(int number in oddnumbers)
{
newnumbersequence.Add(number);
}
foreach(int number in evennumbers)
{
newnumbersequence.Add(number);
}
然后将它们放在静态类
中public static List<int> Sort(this List<int> numbers)
{
int[] temp = numbers.ToArray();
for(int i = 0; i < temp.Length-1; i++)
{
int index = i;
while(index > -1)
{
if (temp[index] > temp[index+1])
{
int num1 = temp[index];
int num2 = temp[index+1];
temp[index] = num2;
temp[index+1] = num1;
}
}
}
return temp.ToList();
}
public static List<int> Reverse(this List<int> numbers)
{
List<int> returner = new List<int>();
for(int i = numbers.Count-1; i > -1; i++)
{
returner.Add(numbers[i]);
}
return returner;
}
答案 2 :(得分:0)
在考虑如何实现此代码时,您应该遵循以下步骤:
在伪代码中,它看起来与此相似:
//Array you get from the user
arr = get_user_inputs()
def split(array) :
even = []
odd = []
for item in array:
if( item %2 == 0):
even.append(item)
else:
odd.append(item)
return (even,odd)
(even,odd) = split(arr)
(even,odd) = ( sort(even) , sort(odd) )
print(odd.toString + even.toString.reverse)
为了实现排序算法本身,我建议查找一些简单的排序算法,例如选择排序。
在youtube上有来自CS50的视频,解释了这个算法非常出色:
答案 3 :(得分:0)
如果您输入一个字母,请检查您的输入是否会崩溃...
number [i] = int.Parse(Console.ReadLine());
您已成功检测到ODD / EVEN数字,但在打印之前需要将它们存储在中间数组中。
您有两种方法,
答案 4 :(得分:0)
我首先将数字拆分为两个列表(是的,我会使用列表而不是数组),然后创建一个方向的$_POST['VariableName'];
函数。
https://en.wikipedia.org/wiki/Bubble_sort
如果该链接不足,您应该能够找到大量实施链接来帮助您。
答案 5 :(得分:0)
主要是伪代码,显示如何分解工作。
// initial conditions
evens = new List // standard C# List<T> interface
odds = new List
i = 0;
// read numbers
while (i++ < 10) {
filter(input);
}
print(odds, evens)
以下是&#34;工人&#34;功能:
// decide if it goes to the even or odd:
filter(input) {
if(input % 2 == 0) {
// sort descending
sort(evens, input, "desc");
} else {
sort(odds, input, "asc");
}
}
// given a list, a new input to add, and direction,
// the function mutates the list accordingly
sort(list, input, direction) {
for(j = 0; j < list.length; j++) {
item = list[j];
if((direction == "desc" && item < input)
|| (direction == "asc" && item > input))
{
list.insert(j, input);
return
}
}
list.add(input); // lastly, if nothing else was triggered
我认为最重要的缺失部分是排序算法。上面,我实现了insertion sort的变体,它使用List.insert
方法作为移动&#34;数组&#34;的已经排序部分的快捷方式。