需求:假如有A,B,C 三家公司,分别在博客园网站上做广告!
为了绝对的公平,决定规定如下:
今天(第1天):A 公司广告排第1位,B 公司广告排2位,C 公司广告排3位
明天(第2天):B 公司广告排第1位,C 公司广告排2位,A 公司广告排3位
后天(第3天):C 公司广告排第1位,A 公司广告排2位,B 公司广告排3位
3天为一个周期,以此为循环。
你这个算法是不公平的
B公司位置好于A公司。C公司正好。
B公司在第一位置出现了一次,在第二位置出现了两次。
A公司在第一位置出现了一次,在第三位置出现了两次。
公平的话,应该在每个位置各出现一次。象C公司一样。
你想问什么?代码还是算法?什么代码?你不觉得你的问题缺少太多信息了吗?
@心有多大,舞台就有多大:
今天(第1天):A 公司广告排第1位,B 公司广告排2位,C 公司广告排3位
明天(第2天):B 公司广告排第1位,C 公司广告排2位,A 公司广告排3位
后天(第3天):C 公司广告排第1位,A 公司广告排2位,B 公司广告排3位
你要是这样写我就不会看错了。
很简单的,还要什么算法,
第1位A、B、C、A、B、C、A、B、C
第2位B、C、A、B、C、A、B、C、A
第3位C、A、B、C、A、B、C、A、B
这个需要算法吗?
@心有多大,舞台就有多大:
你还没有看出来规律吗?想怎么解?给你代码?
假设有N个人排队看美女,每个人都有一个号码,1~N。
第一天按1~N的顺序看完美女。
第二天,第1个走开,第2个移到第1位,第3也往前移一位,依次类推。原来的第1个变成最后一个,也就是N。然后按照这个顺序看美女。
第三天,参照第二天的处理方法。
....
第N天,参照第二天的处理方法。
@心有多大,舞台就有多大:
你想要啥代码?
C#、JAVASCRIPT、FORTORN、PASCAL、C++、F#、JAVA、PHP、COBOL、VB.NET
如果你知道算法,还没有办法自己写代码,给你代码又有什么用呢?
问题是求某公司某日的广告位置吗?
可以这样理解
解:假设有N个公司,那么第一天为
1 2 3 4 ... N 那么第X个公司的第Y天的位置为
N - mod(N+Y-X-1,N)
你可以按照上面的公司尝试一下。
1 2 3 4 5
select 5 - mod(5+1-2-1,5) from dual
mod 是什么意思
@心有多大,舞台就有多大: 取模。相当于%
for或者while
for(var i=1 ;i++)
{
if(i%3==1)
{
ABC;
}else if(i%3==2)
{
BCA;
}
else
{
CAB;
}
}