蓝桥杯练习系统心得

1.
问题描述

Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。

当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。

输入格式
输入包含一个整数n。
输出格式
输出一行,包含一个整数,表示F n除以10007的余数。

说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。

样例输入
10
样例输出
55
样例输入
22
样例输出
7704
数据规模与约定

1 <= n <= 1,000,000。


答案:

#include  

#include  
#define MOD 10007 
#define MAXN 1000001 
int n, i, F[MAXN]; 
int main() 
{ 
scanf("%d", &n);
F[1] = 1; 
F[2] = 1; 
for (i = 3; i <= n; ++i) 
F[i] = (F[i-1] + F[i-2]) % MOD; 
printf("%d\n", F[n]); 
return 0; 
}


2

问题描述
  给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
  输入的第一行为一个正整数n (1<=n<=10)。
  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
  输出n行,每行为输入对应的八进制正整数。
注意
  输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
提示
  先将十六进制数转换成某进制数,再由某进制数转换成八进制。



错误答案:

#include
using namespace std;
#include 
#include 
#include 
//#include


int main()
{
	//vector x;
	int a[10][100];
	int k = 0;
	string s;
	int n;
	int sum=0;
	cin >> n;
	while (k	{
		cin >> s;
		for (int i = 0; i < s.length(); i++)
		{
			if (s[i] >= '0'&&s[i] <= '9')
			{
				sum += (s[i] - '0')*pow(16, s.length()-1- i);
			}
			else
			{
				sum += (s[i] - 'A' + 10)*pow(16, s.length() -1 - i);
			}
		}
		//cout << sum<		int j = 1;
		while (sum!=0)
		{
			a[k][j] = sum % 8;
			sum = sum / 8;
			j++;
		}
		a[k][0] = j-1;
		k++;
	}
	for (int j = 0; j < k; j++)
	{
		for (int i = a[j][0]; i >0; i--)
		{
			cout << a[j][i];
		}
		cout << endl;
	}


	return 0;
}


正确答案:

// 十六进制转换8进制 AC

#include 
#include 
using namespace std;
int arr[10000001];

int main()
{
  int n,len_str,i,j;
  string str,str2;
  cin>>n;
  while(n--)
  {
    cin>>str;
    len_str=str.length();
    str2="";

    // 十六进制转换为二进制
    for(i=0;i

3.

问题描述
  123321是一个非常特殊的数,它从左边读和从右边读是一样的。

你可能感兴趣的:(心得,蓝桥杯)