using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WaysOf100
{
class WaysOf100Test
{
static void Main(string[] args)
{
WaysOf100 test= new WaysOf100();
test.Go();
test.EliminateDuplicates();
}
}
class WaysOf100
{
List<string> results = new List<string>();
public void Go()
{
int num = 5, temp=0;//to store the intermediate difference
for (int i = 1; i <num; i++)
{
temp = num - i;
for (int j = 1; j <= temp; j++)
{
if (temp % j == 0)
{
//Console.Write(i + " ");
string text = "";
text = i.ToString();
for (int k = 1; k <= (temp / j); k++)
{
//Console.Write(j + " ");
text += j.ToString();
}
char[] rev = text.ToCharArray();
Array.Reverse(rev);
if(!(results.Contains(rev.ToString())))
results.Add(text);
}
}
}
}
public void EliminateDuplicates()
{
//To eliminate the duplicates
/*for (int i = 0; i < results.Count; i++)
{
for (int j = 0; j < results.Count; j++)
{
if (!(results[i].Equals(results[j])))
{
char [] rev = results[j].ToCharArray();
Array.Reverse(rev);
if (results[i]==rev.ToString())
results.Remove(rev.ToString());
}
}
}*/
foreach (var result in results)
{
Console.WriteLine(result);
}
Console.WriteLine("Total number of elements is :{0}",results.Count);
}
}
}
到目前为止的结果是 11111 122 14 2111 23 311 32 41
这就是我想要的简短:41的反向是14和14已经存在于列表中所以我不想添加41.类似地,32的反向是23也存在因此32不应该添加。但是,我为实现这一功能而编写的这篇文章并没有给出理想的结果
if(!(results.Contains(rev.ToString())))
results.Add(text);
答案 0 :(得分:1)
您遇到的问题是rev.ToString()'
返回"System.Char[]"
而不是您想要/期望的字符串值。为了您的逻辑,请尝试以下方法:
public void EliminateDuplicates()
{
//Eliminate the duplicates
for (int i = 0; i < results.Count; i++)
{
for (int j = 0; j < results.Count; j++)
{
if (!(results[i].Equals(results[j])))
{
char[] rev = results[j].ToCharArray();
char[] forward = results[i].ToCharArray();
Array.Reverse(rev);
bool bEqual = true;
for( int n = 0 ; n < results[j].Length && true == bEqual ; n++ )
{
if( rev[n] != forward[n] )
{
bEqual = false;
}
}
if( true == bEqual)
results.Remove(results[j] );
}
}
}
foreach (var result in results)
{
Console.WriteLine(result);
}
Console.WriteLine("Total number of elements is : {0} ", results.Count);
}
答案 1 :(得分:1)
终于解决了..
if (!(results.Contains(new string(rev))))
results.Add(text);
将rev.ToString()
更改为new string(rev)
并立即正常工作。我想要的是什么。非常感谢帮助人员
答案 2 :(得分:0)
反向是您要检查的唯一案例吗?一种方法是将结果标准化为例如比较前的排序顺序。因此在比较之前将132和213转换为123。