| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1080 人关注过本帖
标题:求帮忙看一下我自己写的c#小程序,虽然运行得,总感觉自己写不对
只看楼主 加入收藏
梨小橙
Rank: 2
等 级:论坛游民
帖 子:28
专家分:13
注 册:2013-5-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
求帮忙看一下我自己写的c#小程序,虽然运行得,总感觉自己写不对
朋友们,帮忙看一下,给个点帮助(题目是:用Out参数实现以下功能;有一群人同城一条船,穿漏,必须有人跳水减轻重量才能保持船不沉,大家决定围成一圈报数,报道7的人跳水,该人的下一个人重一开始继续报数,依旧是报道7跳水,如此重复,知道所有人跳水位止(最后一个自己数到7跳水)。定义一个描述聪明人getBestPosition方法调用该方法可以获得个位置入水的先后顺序,该方法有两个参数,分别是总人数和一个存放入水顺序的数组,定义各界面调用方法,输出各位置入水次序)



帮看一下有什么问题,我基础很差,希望能给些详细解析,谢谢!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
   public class getBestPosition
   {
       public string name;
       public string weight;
       public void getSafetyposition(int peopleNumber, int jumpNumber, out int[] position)
       {
           position = new int[peopleNumber];
           int i, k, flag;
           for (i = 1; i < peopleNumber; i++)
           {
               position[i] = 1;
           }
           for (k = 1; k <= jumpNumber; k++)
           {
               flag = 0;
               for (i = 1; i < peopleNumber; i++)
               {
                   if (position[i] == 1) flag++;
                   if (flag == 7) position[i] = 0;
               }
           }
       }
    }
}
搜索更多相关主题的帖子: 聪明人 跳水 
2013-05-17 18:31
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
收藏
得分:7 
这个跟基础关系不太大了,因为也不用什么技术,主要是算法,算法也有多种,聪明点的人能想到聪明的算法,笨点的人就用笨一点的算法,总之能算出来就好。
按照题目要求,初始有两个参数,一个是总人数,一个是数组,这个数组同时做为输出参数,存放跳水顺序
我总觉得最后一个人很傻,自己数到7,然后跳- -其实大家一起跳多好,反正都要跳的,躲也躲不掉

这里提供一个比较笨的办法,但是还算容易理解
假设有10个人,那么peopleNumber参数传入10,position数组做为输出参数存放顺序
先弄一个临时的数组存放初始顺序
1
2
3
4
5
6
7
8
9
10
首先判断总人数是否>=7,如果大于等于7,那么就是第7个人跳了,就把这个人拿出来放到position里面
position数组现在有一个值了
7
现在继续再弄一个临时数组,存放接下来的顺序,也就是复制数组跳水那个人后面的到新数组,再复制跳水那个人前面的到新数组,新数组如下
8
9
10
1
2
3
4
5
6
重复上面的判断,那么第7个位置的是4号
position数组里面就有两个数了
7
4
继续新数组如下
5
6
8
9
10
1
2
3
第7位的是2号
position数组如下
7
4
2
新数组为
3
5
6
8
9
10
1
那现在会把1放到position数组里面,position数组为 7 4 2 1
现在数组长度不足7位了
3
5
6
8
9
10
算法就是7除以剩下的长度,取余数, 7 除以 6 ,余数为1,那就是1号位置跳,position数组为 7 4 2 1 3
剩下
5
6
8
9
10
同样的 7 除以 5,余2,那就是2号位置,position数组为 7 4 2 1 3 6
8
9
10
5
同样算法,position数组为 7 4 2 1 3 6 10  
5
8
9
position数组为 7 4 2 1 3 6 10 5
8
9
后最position数组为 7 4 2 1 3 6 10 5 8 9
2013-05-17 19:20
梨小橙
Rank: 2
等 级:论坛游民
帖 子:28
专家分:13
注 册:2013-5-14
收藏
得分:0 
回复 2楼 yhlvht
能不能给我个例子,我真心不会,就会模仿

一念起,万水千山;
一念灭,沧海桑田。
2013-05-17 22:22
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
收藏
得分:10 
程序代码:
class Program
    {
       
        static void Main(string[] args)
        {
            Program p = new Program();
            Console.WriteLine("请输入总人数:");
            string str = Console.ReadLine();
            int peopleNumber = int.Parse(str);
            int[] position;
            p.getSafetyposition(peopleNumber, out position);
            Console.WriteLine("跳水顺序:");
            for(int i = 0; i < position.Length; i++)
            {
               
                Console.Write(position[i] + " ");
            }
            Console.ReadKey();
        }

        public void getSafetyposition(int peopleNumber, out int[] position)
        {
            int[] temp = new int[peopleNumber];
            int[] temp1;
            position = new int[peopleNumber];
            int index = 0;
            for (int i = 1; i <= peopleNumber; i++)
            {
                temp[i - 1] = i;
            }
            while (position[peopleNumber - 1] == 0)
            {
                temp1 = new int[temp.Length - 1];
                if (temp.Length >= 7)
                {
                    position[index] = temp[6];
                    if (temp1.Length >= 7)
                    {
                        Array.Copy(temp, 7, temp1, 0, temp.Length - 7);
                        Array.Copy(temp, 0, temp1, temp.Length - 7, 6);
                    }
                    else
                    {
                        Array.Copy(temp, 0, temp1, 0, 6);
                    }
                }
                else
                {
                    int k = 7 % temp.Length;
                    if (k > 0)
                    {
                        position[index] = temp[k - 1];
                        
                        Array.Copy(temp, k, temp1, 0, temp.Length - k);
                        if (temp1.Length != temp.Length - k)
                        {
                            Array.Copy(temp, 0, temp1, temp.Length - k, temp1.Length - (temp.Length - k));
                        }
                    }
                    else
                    {
                        position[index] = temp[k];
                    }
                }
                temp = temp1;
                index++;
            }
        }
    }
2013-05-18 01:15
csharpluntan
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:7
帖 子:197
专家分:1122
注 册:2013-4-24
收藏
得分:1 
版主威望

投之以桃,报之以李
2013-05-18 11:49
梨小橙
Rank: 2
等 级:论坛游民
帖 子:28
专家分:13
注 册:2013-5-14
收藏
得分:0 
回复 4楼 yhlvht
哇!谢谢

一念起,万水千山;
一念灭,沧海桑田。
2013-05-19 18:57
zhangjing198
Rank: 2
等 级:论坛游民
帖 子:54
专家分:76
注 册:2013-4-2
收藏
得分:2 
楼主,你程序运行成功了么?怎么感觉核心算法不对头呢。。。
程序代码:
for (k = 1; k <= jumpNumber; k++)
           {
               flag = 0;
               for (i = 1; i < peopleNumber; i++)
               {
                   if (position[i] == 1) flag++;
                   if (flag == 7) position[i] = 0;
               }
           }
这里是不是有问题啊?呵呵,请教请教~~
2013-05-19 21:47
梨小橙
Rank: 2
等 级:论坛游民
帖 子:28
专家分:13
注 册:2013-5-14
收藏
得分:0 
回复 7楼 zhangjing198
那个运行得,不过应该不对,版主给那个,我试过了,绝对对

一念起,万水千山;
一念灭,沧海桑田。
2013-05-19 22:01
zhangjing198
Rank: 2
等 级:论坛游民
帖 子:54
专家分:76
注 册:2013-4-2
收藏
得分:0 
版主厉害!
2013-05-20 10:20
快速回复:求帮忙看一下我自己写的c#小程序,虽然运行得,总感觉自己写不对
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023534 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved