2011年安联杯安徽省青少年信息学奥林匹克竞赛 1.三次方求和给你一个三位数,你要对这个三位数的各位数字的3次方求和,然后再对求出的和中各位数字的3次方求和,如此一直继续下去,判断最后

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/28 16:37:41

2011年安联杯安徽省青少年信息学奥林匹克竞赛 1.三次方求和给你一个三位数,你要对这个三位数的各位数字的3次方求和,然后再对求出的和中各位数字的3次方求和,如此一直继续下去,判断最后
2011年安联杯安徽省青少年信息学奥林匹克竞赛
1.三次方求和
给你一个三位数,你要对这个三位数的各位数字的3次方求和,然后再对求出的和中各位数字的3次方求和,如此一直继续下去,判断最后能否得到一个不再变化的固定值.如能得到一个固定值,就告诉我这个固定值;如果不能,则告诉我提示信息“error”.注意了,若某一次求和得到的值超过3位数,则取该数的低三位继续往下运算……
例如:对于三位数111,则第一次计算应该是1×1×1 + 1×1×1 + 1×1×1=3.第二次应是0×0×0 + 0×0×0 + 3×3×3=27.第三次应是0×0×0 + 2×2×2 + 7×7×7=351.第四次应是3×3×3 + 5×5×5 + 1×1×1=153.第五次应是1×1×1 + 5×5×5 + 3×3×3=153,与第四次结果重合,不再计算,输出固定值153.
输入:一行,一个三位数N(100≤N≤999).
输出:一行,如能得到一个固定值,则输出这个固定值;如不能,输出提示信息“error”.
样例1:
输入:(cubsum.in)
111
输出:(cubsum.out)
153
样例2:
输入:
102
输出:
error
2.最高得分
采水晶珠,假设所有的字母水晶珠都可以采,每种字母水晶珠的单颗价值都是一样的,且采摘任意一颗水晶珠所需要的时间都是1秒,但是采摘水晶珠的总时间是有限的,那么应该如何选择自己所要的字母水晶珠,使得总价值最高呢?假设每种字母水晶珠的数量和总价值用(A,B)表示,其中A表示这种水晶珠总的数量,B表示所有这种水晶珠的总价值.例如一共有3种字母水晶珠,其数量和价值分别如下:(4,20)、(4,24)、(5,38),留给卡卡西采摘水晶珠的总时间是10秒,则选择后两种水晶珠全部摘取,第一种摘取一颗时,可得摘取的最大价值为67.00,如果选择摘前两种水晶珠和两颗第三种水晶珠,所能得价值为59.20.你能帮助卡卡西计算出给定时间内所能采摘水晶珠的最大价值
输入:共N+1行,第一行为两个整数N(100≤N≤10000)和T(1≤T≤10000)(中间用空格隔开),分别表示字母水晶珠种类数和总的采摘时间;后面N行中,每行两个整数S(1≤S≤100)和V(1≤V≤100)(中间用空格隔开),分别表示这种字母水晶珠的总数量和总价值.
输出:一行,所能得到的最大价值,输出结果保留两位小数.
样例:
输入:
3 10
4 20
4 24
5 38
输出:
67.00
3.字母项链
这个项链需要由连接在一起的各种大小不同的字母水晶珠制成,意味着珠子可能在任意的地方断开,相邻的字母水晶珠之间的连接并不是很好,可能会由于项链自身的重量而使得它断开.项链断开时情况会很糟糕.因此,断开的点很重要.如果前面是小的珠子,项链断裂的可能性要比前面是大珠子要大的多.爱动脑筋的卡卡西想要进一步测试项链的稳定性.所以他需要一个程序以便决定断开珠子的最坏的那个点.
字母水晶项链是由一串A = a1a2 ...am序列组成,m表示制成项链的珠子的个数.当项链围成一圈时,最后一个字母am就是a1的前驱(前一个).第i个珠子比第j个珠子更容易断裂就是说序列aiai+1 ...ana1 ...ai-1的字典序小于序列ajaj+1 ...ana1 ...aj-1的字典序.序列a1a2 ...an的字典序小于序列b1b2 ...bn的字典序就是存在一个整数i,i

2011年安联杯安徽省青少年信息学奥林匹克竞赛 1.三次方求和给你一个三位数,你要对这个三位数的各位数字的3次方求和,然后再对求出的和中各位数字的3次方求和,如此一直继续下去,判断最后
1.
var
n,s,a,b,c,i,j:longint;
num:array[1..100]of longint;
yes:boolean;
function sum(a,b,c:longint):longint;//定义函数求三次方和
begin
sum:=a*a*a+b*b*b+c*c*c;
end;
begin
assign(input,'cubsum.in');
reset(input);
readln(n);//读入
close(input);
assign(output,'cubsum.out');
rewrite(output);
repeat
i:=i+1;
if s>1000 then s:=s mod 1000;//如果超过三位则保留三位
num[i]:=s;//暂存
s:=sum(a,b,c);//调用函数求三次方
for j:=1 to i-1 do if num[j]=s then yes:=true;//如果之前有重复则记录为正确(没有确定结果)
if num[i-1]=s then begin//如果上次和这次相同
writeln(s);break;//输出,退出循环
end;
until yes;
if yes then writeln('error');//如果没有确定结果则输出error
close(output);
end.
2.忘了...
3.
var
str:ansistring;//超长字符串
a:array[1..10000]of ansistring;
i,m,min:integer;
begin
min:=1;//min记录最小字符串编号
assign(input,'necklace.in');
reset(input);
readln(m);
readln(str);//读入
close(input);
for i:=1 to m do begin
a[i]:=copy(str,i,m-i+1)+copy(str,1,i-1);//循环保存
if a[min]>a[i] then min:=i;//如果比a[min]大则保留i为min
end;
assign(output,'necklace.out');
rewrite(output);
writeln(min);//直接输出
close(output);
end.
我二等奖...

问什么来的