题目:用1、2、3、4、5、6、7、8、9九个数字拼成一个九位数(每
个数字恰好用一次),使得它的前三位、中间三位、最后三位的比值是1 : 2 : 3。例
如192384576就是一个合法的解,因为192 : 384 : 576 = 1 : 2 : 3
看到这种要求一般会想到 这种逻辑
var m1 = x * 100 + y * 10 + z; //前三位数
var m2 = m1 * 2;
var m3 = m1 * 3;
而每个数都是从1-9之间取 所以会产生各种排序组合
for(int x=1;x<10;x++) // 12 13 14
{
for(int y=1;y<10;y++){
for(int z=1;z<10;z++){
}
}
}
稍微分析一下了,还是上代码,代码只现实现功能,没有什么复杂时间度,性能,以后算法学好在优化
class Program{static void Main(string[] args){for (int x = 1; x <10; x++) //1到9 {for (int y = 1; y <10; y++){if (x == y) continue;for (int z = 1; z <10; z++){if(x==y||y==z||x==z) continue;// 确保无重复var m1 = x * 100 + y * 10 + z; //前三位数 var m2 = m1 * 2;var m3 = m1 * 3;if (m3 >= 1000) continue;//跳出if (!m1.ToString().Contains("0") && !m2.ToString().Contains("0") && !m3.ToString().Contains("0")){var s = m1.ToString() + m2.ToString() + m3.ToString(); //但是s里面可能有重复的,所以也要判断一下if (CompareCC(s) > 0) continue;Console.WriteLine("这个数是:" + s);}}}}}public static int CompareCC(string s){int count = 0;for (int i = 0; i <s.Length; i++){for (int j = 1; j <s.Length; j++){if (i == j) continue;if (s.Substring(i, 1) == s.Substring(j, 1)) //同位置字符串是否相同 {count++;}}}return count;}}