1056 - sqrt log sin 函数
时间限制 : 1 秒
内存限制 : 32 MB
小明的老师给小明布置了这样一道作业题,一个序列符合以下定义:

现问你这个序列的第n项是多少?
题目输入
输入包含多组测试数据。每组输入一个整数n(0<=n<=1000000),当输入-1时,输入结束。
题目输出
对于每组输入,输出第n项的值,结果请mod 1000000。
输入/输出样例
输入格式
0 -1
输出格式
1
C语言解答
#include<stdio.h> #include<math.h> int a[1000001]; int main() { int n; double i,x,y,z; a[0]=1; for(i=1;i<=1000000;i++) { x=i-sqrt(i); y=log(i); z=i*sin(i)*sin(i); a[(int)i]=(a[(int)x]+a[(int)y]+a[(int)z])%1000000; } while(scanf("%d",&n)!=EOF,n!=-1) printf("%d\n",a[n]); return 0; }
C++解答
#include<stdio.h> #include<math.h> int a[1000001]; int main() { int n; double i,x,y,z; a[0]=1; for(i=1;i<=1000000;i++) { x=i-sqrt(i); y=log(i); z=i*sin(i)*sin(i); a[(int)i]=(a[(int)x]+a[(int)y]+a[(int)z])%1000000; } while(scanf("%d",&n)!=EOF,n!=-1) printf("%d\n",a[n]); return 0; }
Java解答
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNextInt()) { int N = in.nextInt(); if(N == -1) break; int[] x = new int[N+1]; x[0] = 1; double a1,b1,c1; int a2,b2,c2; for(int i = 1;i<=N;i++) { a1 = Math.sqrt(i); b1 = Math.log(i); c1 = Math.pow(Math.sin(i),2); a2 = (int)Math.floor(i-a1); b2 = (int)Math.floor(b1); c2 = (int)Math.floor(i * c1); x[i] = (x[a2] + x[b2] + x[c2]) % 1000000; } System.out.println(x[N]); } } }