风在山路吹 2009-10-14 15:51
谢谢楼主,
果然能用~
太神奇了!
coroyi 2009-09-25 16:02
我把那个组建在添加/删除里卸掉了,然后把C盘下隐藏的MSOCache文件夹删了,office2007就可以装了。
不删掉MSOCache,安装程序还是强制要hash值一样的文件才可以。
Farmer 2009-09-09 13:16
这题我也做了一下,2种
1 [url=http://www.cnblogs.com/farmer/archive/2009/09/08/1562514.html]http://www.cnblogs.com/farmer/archive/2009/09/08/1562514.html[/url]
2
[url=http://www.cnblogs.com/farmer/archive/2009/09/08/1562812.html]http://www.cnblogs.com/farmer/archive/2009/09/08/1562812.html[/url]
Joyaspx 2009-09-01 19:08
@文明的天空
你可以这么理解,17个人围成一圈,其中一人从1开始报数,谁念到3的倍数就自动退出这个圈,留下的人接着报数,直到剩下最后一个人为止。
文明的天空 2009-08-31 09:00
单看题目,好像说的不够明白!
是不是:P1:1,P2:2,P3:3,P3退!
P1:1,P2:2,P4:3,P4退!
。。。。
好像怪怪的!
ephon 2009-08-30 23:42
17个人围成一圈,从第一个人开始报数,报到3的退出,一直到剩下最后一个人
1、17个人 是一个初始状态
2、围成一圈 是一个开关设置
3、从第一个人开始报数 是一个开关设置
4、报到3的退出 3是一个开关设置
5、一直到剩下最后一个人 最后一个人是一个开关设置
....
如果OO,你就直接
PsnQueue pq = new PsnQueue();
pq.PsnCount = 17;
pq.
pq.
pq.
pq.
。。。。
什么的之后,执行pq.start();
然后获得pq.GetQueryInnerOrder()。。。
对结果你想怎么处理都行,不一定是console write
Joyaspx 2009-08-30 13:23
@我写的不是代码 是寂寞
[quote]我写的不是代码 是寂寞:
我觉得这个段代码依然不算OO
首先,类的内部成员不应该public,这破坏了封装,当然我想lz可能只是想做个题,所以没有计较那么多,但依当先的代码来看,这个类实际上是一个结构体。
对于一个Person对象的操作都是在Main()和Remove()里面进行的,我觉得这跟面向过程的编程的模式差不太多。像Remove这个方法,其实可以放到Person()类中,或者你再建立一个PersonQueue的类,这个类里面放对于Person的操作和一个Person的List,比如那个对于.next的判断操作。
就是说在Main里面看起来像这样:PersonQueue.Initiliaz()
PersonQueue.Remove()。这样的话,你的Person类,或者PersonQueue类才可以被重用,这才比较符合基本的OO精神。
拙见,仅供参考。[/quote]
你的意见提得很好,Remove()是封装在Person类里面比较好,初始化数据也应该借助一个管理类(或者工厂类)来完成,就像你说的PersonQueue类。
一过 2009-08-27 17:38
我是来学习的,哈哈,看的晕乎首,哎,面向对象啊
Nick Wang (懒人王) 2009-08-27 17:12
强扭的瓜不甜,用OO不见得就好
happy_ud 2009-08-27 17:08
LZ本来想秀一下自己会搞类了,结果成为大家拿出来批斗的反面教材
OOLi 2009-08-27 14:30
这里只用了封装啊,那继承,多态呢?所以思想仍旧不够OO,不管是pulick还是private,关键问题是用面向对象的思想解决问题啊,
OOLi 2009-08-27 14:25
看这个:http://www.cnblogs.com/hongyin163/archive/2009/08/27/1555012.html
星~无敌 2009-08-27 13:40
挺牛的
韦恩卑鄙 2009-08-27 10:52
很难弄清楚的是
判断count%3 s 的究竟是这个游戏 在做 还是人在做
我倾向是游戏在作
被偷De贼 2009-08-27 10:52
[quote]Galactica:
搞个Person类出来,就叫着OO了吗?
要抽象的不是Person,而是业务逻辑.
当这个业务逻辑建立好后,我们可以随意更改报数规则,退出规则,是人报数,还是狗叫等等.
显然,使用目前已经成熟的工作流来解决这个问题是最佳方案.[/quote]
支持。1,2,3点。
偶工作流不熟。。。略过-):
Martin_xiao 2009-08-27 10:47
[quote]我写的不是代码 是寂寞:
我觉得这个段代码依然不算OO
首先,类的内部成员不应该public,这破坏了封装,当然我想lz可能只是想做个题,所以没有计较那么多,但依当先的代码来看,这个类实际上是一个结构体。
对于一个Person对象的操作都是在Main()和Remove()里面进行的,我觉得这跟面向过程的编程的模式差不太多。像Remove这个方法,其实可以放到Person()类中,或者你再建立一个PersonQueue的类,这个类里面放对于Person的操作和一个Person的List,比如那个对于.next的判断操作。
就是说在Main里面看起来像这样:PersonQueue.Initiliaz()
PersonQueue.Remove()。这样的话,你的Person类,或者PersonQueue类才可以被重用,这才比较符合基本的OO精神。
拙见,仅供参考。[/quote]
赞同“我写的不是代码 是寂寞”的观点
郑宇 2009-08-27 10:39
@winkingzhang
很强大,我很欣赏。呵呵。
韦恩卑鄙 2009-08-27 10:31
[code=csharp]
public class Person
{
/// <summary>
/// 左手的人
/// </summary>
public Person LeftHand
{
get
{
throw new System.NotImplementedException();
}
set
{
}
}
/// <summary>
/// 右手的人
/// </summary>
public ConsoleApplication11.Person RightHand
{
get
{
throw new System.NotImplementedException();
}
set
{
}
}
/// <summary>
/// 目前所在的桌子
/// </summary>
public RoundTable CurrentRoundTable
{
get
{
throw new System.NotImplementedException();
}
set
{
}
}
/// <summary>
/// 自己的名字
/// </summary>
public string Name
{
get
{
throw new System.NotImplementedException();
}
set
{
}
}
/// <summary>
/// 离开本桌 ->把左手和右手的人互相连接
/// </summary>
public void QuitTable()
{
throw new System.NotImplementedException();
}
}
[/code]
韦恩卑鄙 2009-08-27 10:31
写了一个面向对象的设计
只有设计哦
[code=csharp]
public class RoundTable
{
/// <summary>
/// 目前数的总数
/// </summary>
private int currentIndex;
/// <summary>
/// 整个圆环第一个人
/// </summary>
public Person FirstPerson
{
get
{
throw new System.NotImplementedException();
}
set
{
}
}
/// <summary>
/// 满足几的倍数退出?
/// </summary>
public Predicate QuitSeed
{
get
{
throw new System.NotImplementedException();
}
set
{
}
}
/// <summary>
/// 输出流 可以指定为http/console
/// </summary>
public System.IO.Stream OutputStream
{
get
{
throw new System.NotImplementedException();
}
set
{
}
}
/// <summary>
/// 生成人物列表
/// </summary>
public void GainPerson(int Count)
{
throw new System.NotImplementedException();
}
/// <summary>
/// 清除所有游戏状态 currentIndex 和firstperson
/// </summary>
public void Clear()
{
throw new System.NotImplementedException();
}
/// <summary>
/// 开始游戏
/// </summary>
public void BeginGame()
{
throw new System.NotImplementedException();
}
}
[/code]
winkingzhang 2009-08-27 10:25
[code=csharp]
class Program
{
static void Main(string[] args)
{
Chain c = new Chain();
c.BuildPerson(17);
c.CountPerson();
Console.WriteLine(string.Format("Left person [{0}], Count [{1}]",
c.CurrentPerson.Id, c.CurrentPerson.CountNumber));
Console.ReadLine();
}
}
public class Chain
{
public Person CurrentPerson { get; set; }
public void BuildPerson(int count)
{
if (count < 2)
throw new ArgumentException("Need more than 2 person in chain.", "count");
CurrentPerson = new Person(this);
Person temp = CurrentPerson;
for (int i = 2; i <= count; i++)
{
Person p = new Person(this, temp, null, i);
temp.Next = p;
temp = p;
}
temp.Next = CurrentPerson;
CurrentPerson.Previour = temp;
}
public void CountPerson()
{
CurrentPerson.StartCount();
}
}
public class Person
{
public Person(Chain owner)
: this(owner, null, null, 1)
{
}
public Person(Chain owner, Person prev, Person next, int id)
{
OwnerChain = owner;
Previour = prev;
Next = next;
Id = id;
}
public int Id { get; set; }
public Chain OwnerChain { get; set; }
public int CountNumber { get; set; }
public Person Next { get; set; }
public Person Previour { get; set; }
public void StartCount()
{
this.CountNumber = 1;
this.Next.CountNumber = this.CountNumber + 1;
Console.WriteLine("I am [1], Count [1]");
this.Next.DoCount();
}
private void DoCount()
{
OwnerChain.CurrentPerson = this;
string msg = string.Format("I am [{0}], Count [{1}]", this.Id, this.CountNumber);
Person next = this.Next;
if (next != null && next.Next != next)
{
next.CountNumber = this.CountNumber % 3 + 1;
if (this.CountNumber == 3)
{
msg += "\t==>Quit";
this.Quit();
}
Console.WriteLine(msg);
next.DoCount();
}
}
private void Quit()
{
Previour.Next = Next;
Next.Previour = Previour;
this.Next = null;
this.Previour = null;
OwnerChain = null;
}
}
[/code]
郑宇 2009-08-27 10:19
输出的结果不够有说服力。
每个人报数,应该在每一次退出一个人后,再从1开始。
这样就需要呈现的结果应该是:
人1, 人2, 人3, 人4, 人5, 人6, 人7, 人8, 人9, 人10, 人11, 人12, 人13, 人14
============================================
人1 : 1, 人2 : 2, 人3 : 3 ==> 人3退出。
人4 : 1,人5 : 2,人6 : 3 ==> 人6退出。
人7 : 1,人8 : 2,人9 : 3 ==> 人9退出。
人10 : 1,人11 : 2,人12 : 3==> 人12退出。
人13 : 1,人14 : 2,人1 : 3==> 人1退出。
人2 : 1, 人4:2, 人5 : 3 ==> 人5退出。
人7 :1, 人8:2, 人10:3 ==>人10退出。
人11 :1, 人13:2, 人14:3 ==>人14退出。
人2:1, 人4:2, 人7:3 ==>人7退出。
人8:1, 人11:2,人13:3 ==>人13退出。
人2:1, 人4:2, 人8:3 ==>人8退出。
人11:1, 人2:2, 人4:3 ==>人4退出。
人11: 1,人2:2, 人11:3 ==>人11退出。
人2。
这样,信息就比较齐全了。
eaglet 2009-08-27 10:13
@韦恩卑鄙
是的 LinkedList 是双向循环链表,我前段时间看了它的代码才知道
韦恩卑鄙 2009-08-27 10:07
有多少人知道 linklist 表面上是双向链表 其实是双向循环链表的
adfag 2009-08-27 10:00
但是我按照你说的方法 结果还是那一项未找到
阿龍 2009-08-27 09:57
一切皆对象。一个字母A,不是对象那是什么。。。
boboism 2009-08-27 09:49
看上去更像是用面向对象语言写的非面向对象思想,跟用C写struct好像最大的分别就是用了属性
陶发辉 2009-08-27 09:31
不是写个Class就是OO了,我觉得如果你使用面向对象的话,就应该把类定义成
public class person
{
public person Prev { get; set; }
public person Next { get; set; }
public int Val { get; set; }
public person() { }
Public void Out()
{
if(Val%3==0)
{
Prev.Next=Next;
Next.AddVal();
//......
}
//......
}
Public void AddVal()
{
Val--;
if(Next.Val>1)
{
//......
Next.Val--;
}
//......
}
}
生慧 2009-08-27 09:29
[quote]Galactica:
搞个Person类出来,就叫着OO了吗?
[/quote]
这句话说的很好
Q.Lee.lulu 2009-08-27 09:21
[quote]Gray Zhang:经典约瑟夫环,数据结构的习题……我还是认为这样的问题不需要强求OO,解出来,代码清晰就行[/quote]
DiggingDeeply 2009-08-27 09:09
这不是经典的国产魔比斯环吗?
kenny.guo 2009-08-27 09:07
oo了,呵呵
陈根发的BLOG 2009-08-27 08:51
还缺少一个 圈的对象
沐枫 2009-08-27 08:46
建议楼主听取楼上的意见,重做一次.
Galactica 2009-08-27 08:41
搞个Person类出来,就叫着OO了吗?
要抽象的不是Person,而是业务逻辑.
当这个业务逻辑建立好后,我们可以随意更改报数规则,退出规则,是人报数,还是狗叫等等.
显然,使用目前已经成熟的工作流来解决这个问题是最佳方案.
机枪兵 2009-08-27 08:40
确实觉得建立链接和退出链时的方法应该封装到Person中去,如果只是简单操作的话,如果是复杂的操作则增加一个辅助类,像 我写的不是代码 是寂寞 说的那样。
懒登陆了 2009-08-27 08:25
[quote]我写的不是代码 是寂寞:
我觉得这个段代码依然不算OO
首先,类的内部成员不应该public,这破坏了封装,当然我想lz可能只是想做个题,所以没有计较那么多,但依当先的代码来看,这个类实际上是一个结构体。
...quote]
你可能不知道.NET 3.0支持的写法
public person Prev { get; set; }
public person Next { get; set; }
public int Val { get; set; }
10.06 2009-08-27 08:25
dome?是demo吧
eaglet 2009-08-27 08:24
Person 似乎应该有一个退出和报数的方法和听旁边的报数的事件
Main 函数应该只发一个开始指令和输出一下最后剩下的那个人,其他什么都不做。这样感觉会比较OO一些。
不过约瑟夫环的解法有数学公式可以直接解出来的,采用面向对象的思路效率其实很低。不过从题目的考察点来看主要还是想考察对OO思想的理解。
JustinHuang 2009-08-27 08:23
这不一线性列表吗?
冬之心 2009-08-27 08:12
你这个person类就只是个数据结构 并没有多么的OO啊 呵呵
我写的不是代码 是寂寞 2009-08-27 07:50
我觉得这个段代码依然不算OO
首先,类的内部成员不应该public,这破坏了封装,当然我想lz可能只是想做个题,所以没有计较那么多,但依当先的代码来看,这个类实际上是一个结构体。
对于一个Person对象的操作都是在Main()和Remove()里面进行的,我觉得这跟面向过程的编程的模式差不太多。像Remove这个方法,其实可以放到Person()类中,或者你再建立一个PersonQueue的类,这个类里面放对于Person的操作和一个Person的List,比如那个对于.next的判断操作。
就是说在Main里面看起来像这样:PersonQueue.Initiliaz()
PersonQueue.Remove()。这样的话,你的Person类,或者PersonQueue类才可以被重用,这才比较符合基本的OO精神。
拙见,仅供参考。
好俊的功夫啊 2009-08-27 07:17
汗,怎么都这么晚
Henry Liang 2009-08-27 02:59
@Jeffrey Zhao
老赵果然严格啊!
Jeffrey Zhao 2009-08-27 01:20
你那Person类不该小写名称的……
Gray Zhang 2009-08-27 00:48
经典约瑟夫环,数据结构的习题……我还是认为这样的问题不需要强求OO,解出来,代码清晰就行
ffia 2009-07-04 23:05
按你的这种方法,我安装了,PS CS4还是不认我的X1950GT显卡。
吃苹果的猪 2009-02-07 00:56
谢谢
刚好遇到这个问题了
电视剧在线网 www.tvk6.cn 2009-01-12 20:50
电视剧在线网 www.tvk6.cn
阿Ray 2008-10-28 16:36
谢谢!