切换到宽版
  • 7937阅读
  • 7回复

普及组第一题解题 [复制链接]

上一主题 下一主题
离线流云飞袖
 
只看楼主 倒序阅读 0 发表于: 2006-11-19
随机数;
因为随机数的范围在1~1000,所以设个1~1000的数组,默认置0,
对应文件中哪个数值出现1次,则a:=a+1,同时dec(m),最后当
if a>0时输出数组的值,无需排序。去重复值。

program random(input,output);
var a:array[1..1000] of integer;
    i,m,temp,n:integer;
begin
    assign(input,'d:\data\random.in');
    reset(input);
    assign(output,'d:\data\random.out');
    rewrite(output);
    read(n);
    readln;
    fillchar(a,sizeof(a),0);
    m:=n;
    for i:=1 to n do
    begin
    read(temp);
    a[temp]:=a[temp]+1;
    if a[temp]>1 then dec(m);
    end;
    write(m);writeln;
    for i:=1 to 1000 do
    if a>0 then
      write(i,' ');
    close(input);
    close(output);
end.
[ 此贴被流云飞袖在2006-11-19 19:24重新编辑 ]
离线dqllsc
只看该作者 1 发表于: 2006-11-19
这样
建一个数组,把有着个数的变为1,其余为0。
大家认为,
这样好吗?
离线wolf
只看该作者 2 发表于: 2006-11-19
可以吧,我就这样做的
离线wolf
只看该作者 3 发表于: 2006-11-19
用集合也可以吧?
离线xyw66
只看该作者 4 发表于: 2006-11-20
用集合应该不行。因为集合的数据个数和数据的范围都只能是0..255,而本题要求的范围最大是1000

1楼的说法是可行的。

其实本题并不需要排序,算法和以前某年的初赛程序填空是一样,即不用排序算法对一组整数进行排序
离线dog_yj
只看该作者 5 发表于: 2006-11-26
提醒大家一点...这个叫做箱排序...............(基数排序的简化版本).........
离线雨中浪子
只看该作者 6 发表于: 2006-11-27
就是统排

#include "stdio.h"

FILE *fp;
int n,a[101],i,j,k,t=0,f=1,q,s;

in()
{fp=fopen("hebingguozi.in","r");
fscanf(fp,"%d",&n);
for(i=1;i<=n;i++)
fscanf(fp,"%d",&a);
fclose(fp);
}
out()
{fp=fopen("hebingguozi.out","w");
fprintf(fp,"%d",t);
fclose(fp);
}

main()
{in();
for(i=2;i<=n;i++)
{for(j=1;j<i;j++)
{if(a<a[j])
  {q=a;
  for(k=i;k>j;k--)
  a[k]=a[k-1];
  a[k]=q;
  }  
}
}
for(s=1;s<n;s++)
{a[1]=a[1]+a[2];
t=t+a[1];
for(i=2;i<n;i++)
  a=a[i+1];
a[n-s+1]=10000;
for(j=1;j<i;j++)
{if(a[1]>a[j]&&a[1]<=a[j+1])
  {q=a[1];
  for(k=1;k<j;k++)
  a[k]=a[k+1];
  a[k]=q;
  }
}
}
out();  
}

离线dqllsc
只看该作者 7 发表于: 2006-11-28
不用去重。
用一个数组实现。01布尔。
快速回复
限100 字节
 
上一个 下一个