算出结果分数任提!

路人乙e 2008-04-09 03:31:10
高手何在?

有一组数字:『2, 3, 4, 1, 2, 2, 3, 4, 3, 3, 4, 5』

经过排列变成格式:
2,3,4
1,2
---2,3,4
------3
------3,4,5

我要的最终格式:
1
--1.1
----1.1.1
2
--2.1
--2.2
----2.2.1
------2.2.1.1
----2.2.2
----2.2.3
------2.2.3.1
------2.2.3.1.1
...全文
525 54 打赏 收藏 转发到动态 举报
写回复
用AI写文章
54 条回复
切换为时间正序
请发表友善的回复…
发表回复
路人乙e 2008-12-19
  • 打赏
  • 举报
回复
d
wh110 2008-04-10
  • 打赏
  • 举报
回复
哈哈,学习一下。意思看完所有人的回复也总算明白了。
王集鹄 2008-04-10
  • 打赏
  • 举报
回复
int[] hs = { 2, 3, 4, 1, 2, 2, 3, 4, 3, 3, 4, 5 };
//int[] hs = { 2, 5, 8, 3, 6, 9 };
int[] ls = new int[hs.Length]; // 每一位的长度
ls[0] = 1;
for (int i = 1; i < hs.Length; i++)
{
switch (Math.Sign(hs[i] - hs[i - 1]))
{
case 0: // 相等
ls[i] = ls[i - 1];
break;
case +1: // 大于
ls[i] = ls[i - 1] + 1;
break;
case -1: // 小于
for (int j = i - 1; j >= 0; j--)
{
if (hs[i] == hs[j])
{
ls[i] = ls[j];
break;
}
else if (hs[i] > hs[j])
{
ls[i] = ls[j + 1];
break;
}
}
if (ls[i] == 0) ls[i] = 1;
break;
}
}
Console.Write(ls[0]);
for (int i = 1; i < ls.Length; i++)
{
Console.Write(",");
Console.Write(ls[i]);
}
Console.WriteLine();

int[] ns = new int[ls.Length];
ns[0] = 1;
Console.WriteLine(ns[0]);
for (int i = 1; i < ls.Length; i++)
{
for (int j = ls[i]; j < ls.Length; j++) //后面的填0
ns[j] = 0;
ns[ls[i] - 1]++;

Console.Write(ns[0]);
for (int j = 1; j < ls[i]; j++)
{
Console.Write(".");
Console.Write(ns[j]);
}
Console.WriteLine();
}


我是在WinForm中测试的,楼主自己改改。

[Quote={ 2, 3, 4, 1, 2, 2, 3, 4, 3, 3, 4, 5 }输出]1,2,3,1,2,2,3,4,3,3,4,5
1
1.1
1.1.1
2
2.1
2.2
2.2.1
2.2.1.1
2.2.2
2.2.3
2.2.3.1
2.2.3.1.1
[/Quote]

[Quote={ 2, 5, 8, 3, 6, 9 }输出]
1,2,3,2,3,4
1
1.1
1.1.1
1.2
1.2.1
1.2.1.1[/Quote]
wyc_xiaoben 2008-04-10
  • 打赏
  • 举报
回复
值类型 remove 方法的问题
wyc_xiaoben 2008-04-10
  • 打赏
  • 举报
回复
for (int i = 1; i < intArr.Count; i++)
{
int tempi = 0;
for (int j = intTemp.Count - 1; j >= 0; j--)
{
if (intArr[i] > intTemp[j])
{
intTemp.Add(intArr[i]);
bits.Add(++tempi);

print(bits);
break;
}
else if (intArr[i] == intTemp[j] )
{
bits[j]++;
intTemp.RemoveAt(j);
intTemp.Add(intArr[i]);
print(bits);
break;
}
else if (intArr[i] < intTemp[j] && j > 0)
{
tempi = bits[j];
bits.RemoveAt(j);
intTemp.RemoveAt(j);
}
else
{
bits[j]++;
intTemp.RemoveAt(j);
intTemp.Add(intArr[i]);
print(bits);
break;
}

}

}
路人乙e 2008-04-10
  • 打赏
  • 举报
回复
帮我优化以下31楼的代码或者给个更好的答案
马上结贴
qiao120196260 2008-04-10
  • 打赏
  • 举报
回复
工作啊。。。没弄啊。。。昨天晚上回家把这事儿给忘了
baichunjian 2008-04-09
  • 打赏
  • 举报
回复
不明白
hzhiyang84 2008-04-09
  • 打赏
  • 举报
回复
算是听明白了
hzhiyang84 2008-04-09
  • 打赏
  • 举报
回复
算是听明白了
路人乙e 2008-04-09
  • 打赏
  • 举报
回复
回42楼
请测试 int[] hs = { 2, 3, 4, 1, 2, 2, 3, 4, 3, 3, 4, 5, 5, 2, 4, 4 };

结果的最后三组应该是
2.3
2.3.1
2.3.2
而你的结果是
3 2
3 2 1
3 2 2
路人乙e 2008-04-09
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 zswang 的回复:]
37楼
『2, 5,8,3,6,9』 怎么变成?『1,2,3,2,3,3』
按我的理解应该是:
『1, 2,3,3,4,5』
请楼主仔细讲解一下这个分解的规律。

『2, 5,8,3,3,3』呢?『2, 5,8,3,6,6』呢?
[/Quote]

抱歉!我回答错误!
应该变成『1,2,3,2,3,4』

输出结果:
1
--1.1
--1.1.1
--1.2
----1.2.1
----1.2.1.1
wyc_xiaoben 2008-04-09
  • 打赏
  • 举报
回复
for (int i = 1; i < intArr.Count; i++)
{
int tempi = 0;
for (int j = intTemp.Count - 1; j >= 0; j--)
{
if (intArr[i] > intTemp[j])
{
intTemp.Add(intArr[i]);
bits.Add(++tempi);

print(bits);
break;
}
else if (intArr[i] == intTemp[j])
{
bits[j]++;
intTemp.Remove(intTemp[j]);
intTemp.Add(intArr[i]);
print(bits);
break;
}
else if (intArr[i] < intTemp[j] && j > 0)
{
tempi = bits[j];
bits.Remove(bits[j]);
intTemp.Remove(intTemp[j]);
}
else
{
bits[0]++;
intTemp.Remove(intTemp[j]);
intTemp.Add(intArr[i]);
print(bits);
break;
}

}

}
王集鹄 2008-04-09
  • 打赏
  • 举报
回复
我们先统一一下,最终结果『1,2,3,2,3,3』是指:每一行出现数字的个数
有了这个结果生成树就是简单的事情!
Hesperus 2008-04-09
  • 打赏
  • 举报
回复
无聊的人还真不少啊
王集鹄 2008-04-09
  • 打赏
  • 举报
回复
37楼
『2, 5,8,3,6,9』 怎么变成?『1,2,3,2,3,3』
按我的理解应该是:
『1, 2,3,3,4,5』
请楼主仔细讲解一下这个分解的规律。

『2, 5,8,3,3,3』呢?『2, 5,8,3,6,6』呢?
路人乙e 2008-04-09
  • 打赏
  • 举报
回复
36楼正确
路人乙e 2008-04-09
  • 打赏
  • 举报
回复
33楼的理解对了一半

首先 数字是随机的

『2, 5,8,3,6,9』
这样该得到什么结果?
会不会变成:
『1, 2,3,1,2,3』


不会,你给的那个结果也不对

应该是:
1
--1.1
--1.1.1
--1.2 (3不小于2,必须在2所在节点的下边)
----1.2.1
----1.2.2
王集鹄 2008-04-09
  • 打赏
  • 举报
回复
『2, 3, 1, 3, 2, 4, 4』
这样?
『1, 2, 1, 2, 2, 3, 3』
[Quote=结果]1-----------1
--1.1-------2
2-----------1
--2.1-------2
--2.2-------2
----2.2.1---3
----2.2.2---3[/Quote]

大概了解。。。。
王集鹄 2008-04-09
  • 打赏
  • 举报
回复
『2, 5,8,3,6,9』
这样该得到什么结果?
要不就变成:
『1, 2,3,3,4,5』
[Quote=结果]1-----------1
1.1---------2
1.1.1-------3
1.1.2-------3
1.1.2.1-----4
1.1.2.1.1---5[/Quote]

看看楼主怎么说
加载更多回复(33)

7,765

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧