例子:
1 2 5 11 12 15 21
1 3 5 10 13 16 21
1 4 5 12 14 17 22
1 6 7 11 12 15 21
.
.
.
.问题:
有很多条数据,数字之间是以空格隔开, 我想每行数据之间作比较,有同样的数字三个的话,把它写出来。。看上面的例子,第一行数据和第二行数据中,1,5,21 是相同的, 想msgbox 打出 ”第一行和第二行的 1,5,21 是相同的“。。有什么好算法,请大家帮忙?
1 2 5 11 12 15 21
1 3 5 10 13 16 21
1 4 5 12 14 17 22
1 6 7 11 12 15 21
.
.
.
.问题:
有很多条数据,数字之间是以空格隔开, 我想每行数据之间作比较,有同样的数字三个的话,把它写出来。。看上面的例子,第一行数据和第二行数据中,1,5,21 是相同的, 想msgbox 打出 ”第一行和第二行的 1,5,21 是相同的“。。有什么好算法,请大家帮忙?
解决方案 »
- [讨论]关于.NET3.5中新增的扩展方法功能
- 通过RFC往SAP里导入数据问题。急急急!!!O(∩_∩)O谢谢!!!
- C#中出现了好多省略号怎么回事???
- C#中如何调用迅雷的下载组件实现BT下载功能?
- ASP.NET中FindControl的使用。
- 怎样写一个类似MessageBox的程序
- 我想实现一个功能,大家帮帮忙,给个思路
- 请版主aspcn、saucer、icyer、redbb和ArLi2003、redbb、bitsbird、qiuji务必进入指点,顶者有分
- 测试时,如何代码覆盖 this.DesignMode 的情况
- C#技术问题!!!!
- WPF界面背景图片大小改变,如何保持代码不变?
- 读取EXCEL时只能读到第9列,EXCEL共有13列
string str = @"1 2 5 11 12 15 21
1 3 5 10 13 16 21
1 4 5 12 14 17 22
1 6 7 11 12 15 21";
string[] temp = str.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < temp.Length; i++)
{
string[] t1 = temp[i].Split(' ');
for (int j = i + 1; j < temp.Length; j++)
{
string[] t2 = temp[j].Split(' ');
bool exists = false;
foreach (string s in t1)
{
if (Array.IndexOf(t2, s) > -1)
{
if (!exists)
{
Console.Write("第{0}行和第{1}行的", i + 1, j + 1);
exists = true;
}
else
Console.Write(",");
Console.Write(s);
}
}
if (exists)
Console.WriteLine("是相同的");
}
}
/*
输出:
第1行和第2行的1,5,21是相同的
第1行和第3行的1,5,12是相同的
第1行和第4行的1,11,12,15,21是相同的
第2行和第3行的1,5是相同的
第2行和第4行的1,21是相同的
第3行和第4行的1,12是相同的*/
1 3 5 10 13 16 21
1 4 5 12 14 17 22
1 6 7 11 12 15 21
...";string[] lines = source.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 1; i < line.Count(); i++)
{
var first = lines[i - 1].Split(' ');
var second = lines[i].Split(' ');
var equ = first.Intersect(second);
if (equ.Count() == 3)
MessageBox.Show(string.Format("第{0}行和第{1}行的{2}是相同的。", i, i + 1, string.Join(', ', equ)));
}
string[] sourceList = { "1 2 5 11 12 15 21", "1 3 5 10 13 16 21", "1 4 5 12 14 17 22", "1 6 7 11 12 15 21" }; for (int i = 0; i < sourceList.Length; i++)
{
for (int j = i + 1; j < sourceList.Length; j++)
{
var first = sourceList[i].Split(' ');
var second = sourceList[j].Split(' ');
var equ = first.Intersect(second);
if (equ.Count() == 3)
{
Console.Write(string.Format("第{0}行和第{1}行的", i+1, j+1));
int n = 0;
for (; n < equ.Count() - 1; n++)
{
Console.Write(equ.ElementAt(n) + ",");
}
Console.WriteLine(equ.ElementAt(n) + "是相同的");
}
}
}
关键是你掌握原理,本质上来说,我和OJ的方法是一样的。因为LINQ提供了求交集的方法,所以把他的代码简化了一点。
不是说不应该集思广益探讨各种方法,实在是你这样简单的问题不值得去研究什么很多方法,把基本的掌握就行了。如同吃饭走路,还分很多方法么?