求个算法

caoyang0299 2016-08-30 10:24:46
例如:
A B C D
10 100
20 110
30 140
40 160
A,B,C,D四列,
给B列D列填数
每行满足A+B=C+D
B列总和500,D列总和90
输出一个答案即可,
...全文
306 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
caoyang0299 2016-09-01
  • 打赏
  • 举报
回复
我先试试,谢谢
xhk008 2016-09-01
  • 打赏
  • 举报
回复
这个有点厉害!
tom2005 2016-09-01
  • 打赏
  • 举报
回复
那城 2016-08-31
  • 打赏
  • 举报
回复
class Program { static Random rand = new Random(); //可以利用随机数,是结果好看点(虽然我没用) static IEnumerable<List<int>> p(List<int> a, int mb, int md) { for (var b = 10; b < mb; b++) { for (var d = 10; d < md; d++) { if (a[0] + b == a[2] + d) { a[1] = b; a[3] = d; yield return a; } } } yield break; } static void Main(string[] args) { var ar = new List<List<int>>() { new List<int>() {10, 0, 100, 0}, new List<int>() {20, 0, 110, 0}, new List<int>() {30, 0, 140, 0}, new List<int>() {40, 0, 160, 0}, }; var mb = 500; var md = 90; var num = 0; foreach (var a in p(ar[0], mb, md)) { foreach (var b in p(ar[1], mb, md)) { foreach (var c in p(ar[2], mb, md)) { foreach (var d in p(ar[3], mb, md)) { if ((a[1] + b[1] + c[1] + d[1] == mb) && (a[3] + b[3] + c[3] + d[3] == md)) { Console.WriteLine("=== {0} ===", ++num); string aa = "第一行B列的值:" + a[1].ToString() + "第一行D列的值:" + a[3].ToString(); Console.WriteLine(aa); string bb = "第二行B列的值:" + b[1].ToString() + "第二行D列的值:" + b[3].ToString(); Console.WriteLine(bb); string cc = "第三行B列的值:" + c[1].ToString() + "第三行D列的值:" + c[3].ToString(); Console.WriteLine(cc); string dd = "第四行B列的值:" + d[1].ToString() + "第四行D列的值:" + d[3].ToString(); Console.WriteLine(dd); if (num > 10) goto Exit; } } } } } Exit: Console.Write("ok"); Console.ReadKey(); } }
caoyang0299 2016-08-30
  • 打赏
  • 举报
回复
哪位大侠提供个写法
PaulyJiang 2016-08-30
  • 打赏
  • 举报
回复
自己列多元公式取解就好了啊
xuzuning 2016-08-30
  • 打赏
  • 举报
回复
不定方程,解太多。呆做就可
        static void Main(string[] args)
        {
            var ar = new List<List<int>>()
            {
                new List<int>() {10, 0, 100, 0},
                new List<int>() {20, 0, 110, 0},
                new List<int>() {30, 0, 140, 0},
                new List<int>() {40, 0, 160, 0},
            };
            var mb = 500;
            var md = 90;
            var num = 0;
            foreach (var a in p(ar[0], mb, md))
            {
                foreach(var b in p(ar[1], mb, md))
                {
                    foreach (var c in p(ar[2], mb, md))
                    {
                        foreach (var d in p(ar[3], mb, md))
                        {
                            if((a[1]+b[1]+c[1]+d[1]==mb) && (a[3]+b[3]+c[3]+d[3]==md))
                            {
                                Console.WriteLine("=== {0} ===", ++num);
                                Console.WriteLine(string.Join(", ", a));
                                Console.WriteLine(string.Join(", ", b));
                                Console.WriteLine(string.Join(", ", c));
                                Console.WriteLine(string.Join(", ", d));
                                if(num > 10) goto Exit;
                            }
                        }
                    }
                }
            }
        Exit:
            Console.Write("ok");
            Console.ReadKey();
        }
        static Random rand = new Random(); //可以利用随机数,是结果好看点(虽然我没用)
        static IEnumerable<List<int>> p(List<int> a, int mb, int md)
        {
            for (var b = 10; b < mb; b++)
            {
                for (var d = 10; d < md; d++)
                {
                    if (a[0] + b == a[2] + d)
                    {
                        a[1] = b;
                        a[3] = d;
                        yield return a;
                    }
                }
            }
            yield break;
        }
小小蓝莓 2016-08-30
  • 打赏
  • 举报
回复
每列固定4个数?

110,531

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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