求广告显示算法

sezooka 2019-05-29 05:38:42
A:4 B:4 C:2 ABC代表三个广告 后边的数字代表各自的权重,如上边的权重结构,想要的播顺序是:ABABC ABABC …… 假如权重结构是: A:6 B:3 C:1 想要的播放顺序是:AABAABAABC AABAABAABC …… A:5 B:0 C:5 想要的播放顺序是:AC AC …… 总之意思是,根据各自权重,尽可能不要连续放一个广告,如上边的权重,最不想要这样的播放顺序:AAAAACCCCC AAAAACCCCC…… 另外实际环境不一定只要ABC三个广告,会有更多,各自权重数字想加也不一定等10,可能等于任何大于0的数字,还有如下的权重结构怎么安排播放顺序 A:5 B:3 C:2 求程序如何实现 不胜感谢!!!!! 也请您推荐其它根据权重显示广告的算法,尝试过随机数,经常出现,连续几条显示同一个广告,不知道如何解决
...全文
118 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxmtgg 2019-05-29
  • 打赏
  • 举报
回复
namespace 广告算法
{
    class Program
    {

        
       public static List<guanggao> listgg = new List<guanggao>();

        static void Main(string[] args)
        {
            listgg.Add(new guanggao("A", 4, "正在播放A"));
            listgg.Add(new guanggao("B", 6, "正在播放B"));
            listgg.Add(new guanggao("C", 2, "正在播放C"));
            listgg.Add(new guanggao("D", 1, "正在播放D"));


            for (int i = 0; i < listgg.Count; i++)
            {
                Console.WriteLine(listgg[i].lei + ":" + listgg[i].cishu);
            }




            //取最小数:
            int temp = 0;
            for (int i = 0; i < listgg.Count; i++)
            {
                if ((i + 1) < listgg.Count)
                {
                    if (listgg[i].cishu > listgg[i + 1].cishu)
                    {
                        temp = listgg[i + 1].cishu;
                    }
                }
            }
            Console.WriteLine("最小数:" + temp.ToString());

            //取最大数:
            int m = 0;
            for (int i = 0; i < listgg.Count; i++)
            {
                if ((i + 1) < listgg.Count)
                {
                    if (listgg[i].cishu < listgg[i + 1].cishu)
                    {
                        m = listgg[i + 1].cishu;
                    }
                }
            }
            Console.WriteLine("最大数:"+m.ToString());


            Console.WriteLine("下面开始展示:");


            
            //int y = listgg.Count;
            
            //do
            //{
            //    for (int i = 0; i < y; i++)
            //    {
            //        if (listgg[i].cishu > temp-1)
            //        {
            //            Console.WriteLine(listgg[i].picture);
            //            Thread.Sleep(2000);
            //        }
            //    }
            //    Console.WriteLine("\n\n");
            //    y -= 1;
            //} while (y>=temp);


            

            //for (int j = 0; j < m; j++)
            //{

            //    for (int i = 0; i < listgg.Count; i++)
            //    {
            //        if (listgg[i].cishu > temp-1)
            //        {
            //            Console.WriteLine(listgg[i].picture);
            //            Thread.Sleep(2000);
            //        }
                    
            //    }
                
            //    Console.WriteLine("\n\n");
            //}

            int y = listgg.Count;
            
            do
            {
                 for (int i = 0; i < y; i++)
                 {
                     if (listgg[i].cishu > temp-1)
                     {
                         Console.WriteLine(listgg[i].picture);
                         Thread.Sleep(2000);
                     }
                 }
                 Console.WriteLine("\n\n");
                 y -= 1;
                 m-=1;
            } while (m>0);









            Console.WriteLine("播放结束......\n");
            Console.ReadKey();
        }




    }

    class guanggao
    {
        public string lei { get; set; }
        public int cishu { get; set; }
        public string picture { get; set; }

        public guanggao(string l,int c,string p)
        {
            lei = l; cishu = c; picture = p;
        }
    }
}
stherix 2019-05-29
  • 打赏
  • 举报
回复
有一个简单的办法 写一个类 有string name,int weight,int sheduled三个属性 分别是名字,权重,已安排的场次 然后用List存储广告资料,其中sheduled都为0 可选:对List从大到小排序 找出 sheduled*1.0/weight 最小的元素,将其安排到广告播放列表中,然后其sheduled++ 循环上一步,直到播放列表的长度等于各个广告权重的和

110,567

社区成员

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

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

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