A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 大虾挂了   /  2013-9-30 17:06  /  9983 人查看  /  36 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

先用console.readline读取字符串,放入字符数组中,遍历这个数组,判断这个字符是否属于ascii中数字的范围(ascii中数字值是连续的)。
回复 使用道具 举报
帕格尼尼的眼泪 发表于 2013-10-1 00:44
大哥你那个是冒泡么,就算是效率超低的,因为你每次排好的你还进行比较,那样重复了。
下面的是冒泡排序
...

你楼上说的我没太看懂,你在说谁用的不是冒泡排序啊,我也没说他们谁是冒泡排序啊。我说我的想法是用冒泡排序稍微改动下实现。你这个确实是冒泡排序,不过可以添加个是否有换位的判定再优化一点。
我下面贴下最后的代码。
回复 使用道具 举报
最终代码
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;

  6. namespace 判断输入数字是否连续
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             int[] num = new int[5];
  13.             string[] adr = new string[] {"第一","第二","第三","第四","最后一" };
  14.             int j;
  15.             bool flag1=false,flag2=false;//分别用于判定是否有换位和是否有相同数字

  16.             Console.WriteLine("请输入5个数字,用回车间隔");
  17.             
  18.             //读取用户输入的5个数字
  19.             for (int i = 0; i < 5; i++)
  20.             {
  21.                 Console.WriteLine("请输入{0}个数字,回车确认", adr[i]);
  22.                 num[i] = Convert.ToInt32(Console.ReadLine());
  23.             }

  24.             //代码的核心部分,冒泡排序算法中添加相等判定
  25.             for (int i = 0; i < num.Length - 1; i++)
  26.             {
  27.                 flag1 = false; //每次循环将换位标识重置
  28.                 for (j = 0; j < num.Length - i - 1; j++)
  29.                 {
  30.                     if (num[j] > num[j + 1])
  31.                     {
  32.                         num[j] = num[j] ^ num[j + 1];
  33.                         num[j + 1] = num[j] ^ num[j + 1];
  34.                         num[j] = num[j] ^ num[j + 1];
  35.                         flag1 = true; //若有换位,则将换位标识设置为true
  36.                     }
  37.                     if (num[j] == num[j + 1]) //相等判定部分
  38.                     {
  39.                         flag2 = true;
  40.                         break; //若有相等元素应直接跳出整个冒泡排序,避免使用goto而采取两次break跳出两次循环
  41.                     }
  42.                 }
  43.                 if (flag2 == true)
  44.                     break; //判定有相等元素,跳出冒泡排序
  45.                 if (flag1 == false)
  46.                     break;
  47.             }

  48.             if(flag2==true) //有相等元素必然不连续
  49.                 Console.WriteLine("不连续");
  50.             else if(num[4]-num[0]==4) //没有相等元素的话,最大元素和最小元素差4则必然连续
  51.                 Console.WriteLine("连续");
  52.             else  //否则不连续
  53.                 Console.WriteLine("不连续");
  54.             
  55.             //foreach(int i in num)
  56.             //    Console.WriteLine(i);

  57.             Console.ReadKey();
  58.         }
  59.     }
  60. }
复制代码

点评

没有修改状态不要给加分。  发表于 2013-10-9 21:45

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 黄晓波 于 2013-10-2 19:31 编辑

1、将5个数存数组num中
2、num数组的最大值与最小值之差为4?做下一步判断:数组num中的5个数字不是连续的
3、数组num中是有重复数字?不是连续的:是连续的
回复 使用道具 举报
黄晓波 发表于 2013-10-2 19:23
1、将5个数存数组num中
2、num数组的最大值与最小值之差为4?做下一步判断:数组num中的5个数字不是连续的
...

我上面贴的那段代码基本就是这个思路,只不过我那里是排序和检测重复是同时进行的,如果检测到重复就没必要在进行排序了。没有检测到重复的情况下再用排序后的数组最后一个数减第一个数观察是否为4
回复 使用道具 举报
本帖最后由 黄晓波 于 2013-10-2 20:35 编辑
大虾挂了 发表于 2013-10-2 19:37
我上面贴的那段代码基本就是这个思路,只不过我那里是排序和检测重复是同时进行的,如果检测到重复就没必 ...

嗯,只是排序比较费时间些

回复 使用道具 举报
你的想法肯定是错误的,如 1,4,3,2,5
回复 使用道具 举报
熊丽 发表于 2013-10-8 17:15
你的想法肯定是错误的,如 1,4,3,2,5

你自己去试试嘛,把代码贴上,然后你输入这5个数字,肯定结果是连续啊。
回复 使用道具 举报
黄晓波 发表于 2013-10-2 19:41
嗯,只是排序比较费时间些

目前只会冒泡排序,以后会学习下其他排序的
回复 使用道具 举报
黄晓波 发表于 2013-10-2 19:41
嗯,只是排序比较费时间些

目前只会冒泡排序,以后会学习下其他排序的
回复 使用道具 举报
还记得等差数列的求和公式么,先把这五个数相加,再与数列相加的结果比较:
for (int i = 0; i < array.Length; i++)
            {
                sum += array[i];
            }
            if (sum == (array.Length * (array[0] + array[array.Length - 1]) / 2))
            {
                Console.WriteLine("这五个数是连续的");
            }
如果两者相等,证明这五个数是连续的。

点评

1,3,5,7,9 sum=15, array.Length * (array[0] + array[array.Length - 1]) / 2 也等于15  发表于 2013-10-10 22:44

评分

参与人数 1黑马币 +6 收起 理由
haxyek + 6

查看全部评分

回复 使用道具 举报
LZ你的题目不太清楚;倘若是想,1,2,3,4,5这样的连续的话可以这样判断,这样的话可以考虑一下等差数列的判断方法。
我是这样想的
1:先用冒泡排序
2:再用最大的数减去最小的数再加1,判断是否等于数组长度,如果相等则是连续的,反之不是。
这个题目LZ确实给的不太清楚;

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
说下我的思路,可以判断任意奇数个数的数字是否连续。
这里简化一下,对5个数字来说,求出平均数average,
那么肯定有一个数和average相等。
依次判断,如果5个数都和average不相等,那么5个数不连续。
5个数依次减去average的结果肯定是-2,-1,0,1,2五个数,当然可以乱序。
5个差值放在list中,依次移除实际5个数与average的差值,如果list中的成员全部移除,那么5个数才是连续的,否则不连续。代码如下
  1. int[] numbers = { 5, 2, 3, 4, 1 }; //简化起见,没让用户手动输入。
  2.             double avr = 1.0*numbers.Sum() / 5; //5个数的平均数,那么这个平均数肯定得跟5个数中的一个数相等。
  3.             bool xx = true ;
  4.             foreach (int n in numbers)
  5.                 if (avr == n)
  6.                     xx = false;     //找到相等数,设置xx为false,,找不到则xx一直未true
  7.             if (xx)   //xx为true的时候,说明肯定不连续。
  8.             {
  9.                 Console.WriteLine("不连续");
  10.                 Console.ReadKey();
  11.                 return;
  12.             }
  13.             //接下来  ,5个与平均数的差值为-2,-1,0,-1,-2
  14.             List<int> request = new List<int>() { -2, -1, 0, 1, 2 };

  15.             foreach (int n in numbers)  
  16.             {
  17.                 request.Remove(n - (int)avr);  //每次移除一个差值,如果是连续的,那么request的5个成员应该被全部移除
  18.             }
  19.             Console.WriteLine(request.Count);
  20.             if (request.Count != 0)       //如果此时还有成员,说明之前的5个数不连续。
  21.             {
  22.                 Console.WriteLine("不连续");
  23.                 Console.ReadKey();
  24.                 return;
  25.             }
  26.             Console.WriteLine("连续");
  27.             Console.ReadKey();
  28.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马