免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 发帖

[组合] 是否存在一个三顶点同色的等腰三角形

将圆周上的各个点随机涂上红黄蓝中的一种颜色,并将所有点连线段。问是否一定存在一个三顶点同色的等腰三角形。
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

也不清楚程序有没编写错误,第2个28点的情况明天用纸笔验证下,今天有些晚了
在圆周上选取正10000边形(第2次28个)的顶点
依次编号0,1,2,3,...,9999
模仿“找素数的筛子”,0,1作为保留的“种子”,开始,顺逆时针方向,划掉成等差数列的数,接下来划掉2,与999,因为0,1,2;999,0,1(mod10000)成等差,3,4保留,接下来依次划掉5,6,7,8,997,(997,0,3mod10000成等差),...,这样10000个数字要划掉9586个;第2个例子28点要划掉20点,也就是说1/3的点都没有了,由抽屉原理说明1楼一定存在等腰三角形。
逻辑上还是有些不严密(为什么这样做,保留下的点与最多情景差不多,我也不能肯定),但第一个保留下的点远小于1/3了。
0Running "d:\fpc\2.4.0\bin\i386-win32\shuzu.exe "
0
9586


║var
║a:array[0..9999] of integer;
║m,i,j:integer;
║begin
║for i:=0 to 9999 do a[i]:=i;
║a[2]:=0;
║a[9999]:=0;
║for i:=3 to 4999 do
║  if a[i]<>0 then
║    for j:=0 to i-1 do
║      if a[j]<>0 then
║            begin
║            m:=2*i-j;
║            a[m]:=0;
║            m:=2*j-i;
║            if m<0 then a[m+9999+1]:=0;
║            end;
║            writeln(a[5000]);
║m:=0;
║for i:=0 to 9999 do
║  if a[i]=0 then m:=m+1;
║writeln(m);

║end.


0
20
var
a:array[0..27] of integer;
m,i,j:integer;
begin
for i:=0 to 27 do a[i]:=i;
a[2]:=0;
a[27]:=0;
for i:=3 to 13 do
  if a[i]<>0 then
    for j:=0 to i-1 do
      if a[j]<>0 then
            begin
            m:=2*i-j;
            a[m]:=0;
            m:=2*j-i;
            if m<0 then a[m+27+1]:=0;
            end;
            writeln(a[14]);
m:=0;
for i:=0 to 27 do
  if a[i]=0 then m:=m+1;
writeln(m);

end.

TOP

零点9循环,是小于1,还是等于1  ?

TOP

回复 3# 游客

=1吧,这你知道的啊

TOP

程序不懂。但是总体的方法应该还是抽屉原理,以前有一个题是多少人里一定有两两相识的那个,觉得这题和那个差不多,也是同色三角形,但加了一个限制就是等腰三角形,而点的数量变成无穷多个了,最好还是能构造出来,这样看得更清晰。

TOP

返回列表 回复 发帖