1.问题描述
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
输入格式
输入包含一个整数n。
输出格式
输出一行,包含一个整数,表示Fn除以10007的余数。
说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。
样例输入
10
样例输出
55
样例输入
22
样例输出
7704
数据规模与约定
1 <= n <= 1,000,000。
1. #include <stdlib.h>
2. #include <stdio.h>
3. #define MOD 10007
4. #define MAXN 1000001
5. int n, i, F[MAXN];
6. int main()
7. {
8. scanf("%d", &n);
9. F[1] = 1;
10. F[2] = 1;
11. for (i = 3; i <= n; ++i)
12. F[i] = (F[i-1] + F[i-2]) % MOD;
13. printf("%d\n", F[n]);
14. return 0;
15. }
2. 问题描述
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
输入格式
第一行为一个整数n。
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出格式
输出一行,按从小到大的顺序输出排序后的数列。
样例输入
5
8 3 6 4 9
样例输出
3 4 6 8 9
1. #include <stdio.h>
2. #include <stdlib.h>
3. void Print(int *data,int n)
4. {
5. int i;
6. for(i=0;i<n;i++)
7. {
8. printf("%d ",data[i]);
9. }
10. printf("\n");
11. }
12.
13. int Split(int *data,int pre,int rear)
14. {
15. int value=data[pre];
16. while(pre<rear)
17. {
18. while(data[rear]>=value && pre<rear) rear--;
19. data[pre]=data[rear];
20. while(data[pre]<value && pre<rear) pre++;
21. data[rear]=data[pre];
22. }
23. data[pre]=value;
24. return pre;
25. }
26.
27. //快速排序
28. void QuickSort(int *data,int pre,int rear)
29. {
30. if(pre<rear)
31. {
32. int mid=Split(data,pre,rear);
33. QuickSort(data,pre,mid-1);
34. QuickSort(data,mid+1,rear);
35. }
36. }
37.
38. int main()
39. {
40. int i;
41. int n;
42. int *data;
43. scanf("%d",&n);
44. data=(int *)malloc(sizeof(int)*n);
45. for(i=0;i<n;i++)
46. {
47. scanf("%d",&data[i]);
48. }
49. QuickSort(data,0,n-1);
50. Print(data,n);
51. return 0;
52. }
3. 问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
注意
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
39
123ABC
样例输出
71
4435274
4435274
提示
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
以下是C++的代码(C的代码没写)
1. #include<iostream>
2. #include<cmath>
3. #include<cstring>
4.
5. using namespace std;
6.
7. int e[16][4];
8. int f[3];
9. int a[500000],c[500000],b[200000];
10. char s[100000];
11.
12. int main()
13. {
14. int n;
15. cin >> n;
16. for (int i = 0; i <= 15; i ++)
17. {
18. int t = i;
19. for (int j = 1; j <= 4; j ++)
20. {
21. e[i + 1][j] = t % 2;
22. t = t / 2;
23. }
24. }
25. for (int k = 1; k <= n; k ++)
26. {
27. for (int i = 1; i <= 400000; i ++) a[i] = 0;
28. cin >> s;
29. int l = strlen(s);
30. for (int i = 0; i < l; i ++)
31. {
32. int p;
33. if (int (s[i]) < 65) p = int(s[i]) - int('0');
34. else p = int(s[i]) - int('A') + 10;
35. for (int j = 1; j <= 4; j ++)
36. a[4 * i + j] = e[p + 1][5 - j];
37. }
38. l = 4 * l;
39. for (int i = 1; i <= l; i ++)
40. c[i] = a[i];
41. for (int i = 1; i <= l; i ++)
42. a[i] = c[l - i + 1];
43. int p = (3 -(l % 3)) % 3;
44. l = l + p;
45. f[1] = 1; f[2] = 2; f[3] = 4;
46. for (int i = 1; i <= l / 3; i ++)
47. {
48. b[i] = 0;
49. for (int j = 1; j <= 3; j ++)
50. b[i] = b[i] + a[3 * i - j + 1] * f[4 - j];
51. }
52. if (b[l / 3] == 0) l --;
53. for (int i = l / 3; i >= 1; i --)
54. cout << b[i];
55. cout << endl;
56. }
57. return 0;
58. }
3. 问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
1. #include<stdio.h>
2. #include<string.h>
3. #include<math.h>
4. int main()
5. {
6. double sum=0,x;
7. char a[8];
8. int len,i=0;
9. gets(a);
10. len=strlen(a);
11. while(len)
12. {
13. if(a[len-1]>='A'&&a[len-1]<='F')
14. x=(a[len-1]-'7')*pow(16,i++);
15. else
16. x=(a[len-1]-'0')*pow(16,i++);
17. sum+=x;
18. len--;
19. }
20. printf("%.0lf",sum);
21.
22. return 0;
23. 二进制转换10进制快捷方法
24. }
4. 问题描述
十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
给出一个非负整数,将它表示成十六进制的形式。
给出一个非负整数,将它表示成十六进制的形式。
输入格式
输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647
输出格式
输出这个整数的16进制表示
样例输入
30
样例输出
1E
提示:(1)按除16取余倒数(也可使用格式输出)。
(2)可以使用递归来处理,递归参数为要转换的数字,如果该数字大于等于16,则将递归处理该数整除16的值,然后再输出最后一位。 C/C++语言可以使用格式输出直接输出转换后的结果。
1. #include <stdio.h>
2. #include <stdlib.h>
3. char data[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
4.
5. //输出
6. void Print(char *num,int n)
7. {
8. int i;
9. for(i=n-1;i>=0;i--) printf("%c",num[i]);
10. printf("\0");
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论