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<=n, 对于每个j(1 <= j < i)都要有aj=bj且ai < bi。聪明的你能测试出项链的稳定性
输入: 两行,第一行为一个正整数m(10≤m≤10000),表示组成项链的字母序长度,第二行为组成项链的字母序。每个珠子由一个英语的小写字母表示(a-z),a < b ... z。
输出: 一行,项链最坏连接处字母珠子的编号。例如i,A[i]就是n个可能断裂点的字典序最小的地方。如果有不止一个的解,输出最小的i。
样例:
输入
11
amandamanda
输出:
11
推荐回答
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. 我二等奖...