C/C++语言基础小算法:
描述
无穷数列1,1,2,3,5,8,13,21,34,55…称为Fibonacci数列,它可以递归地定义为
F(n)=1 ………..(n=1或n=2)
F(n)=F(n-1)+F(n-2)…..(n>2)
现要你来求第n个斐波纳奇数。(第1个、第二个都为1)
输入
第一行是一个整数m(m<5)表示共有m组测试数据
每次测试数据只有一行,且只有一个整形数n(n<20)
输出
对每组输入n,输出第n个Fibonacci数
样例输入
3
1
3
5
样例输出
1
2
5
#include <iostream>
using namespace std;
int main()
{
int m,n,f1=1,f2=1,i;
cin>>n;
while(n--)
{
f1=1,f2=1;
cin>>m;
for(i=2;i<m;i++)
{
f1=f1+f2;
f2=f1-f2;
}
cout<<f1<<endl;
}
return 0;
}
十进制转十六进制
题目描述
十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有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进制表示,其中A,B,C,D,E,F都是大写字母。
样例输入
30
样例输出
1E
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
int main()
{
long n;
int a[1000];
int i,j=0;
scanf("%ld",&n);
if(n==0) printf("0");
else
{
while(n!=0)
{
a[j]=n%16;
j++;
n/=16;
}
for(i=j-1;i>=0;i--)
{
if(a[i]<=9) printf("%d",a[i]);
else
{
printf("%c",a[i]-10+(int)'A');
}
}
}
printf("\n");
return 0;
}
.核桃的数量
题目描述
小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是:
(1)各组的核桃数量必须相同;
(2)各组内必须能平分核桃(当然是不能打碎的)
(3)尽量提供满足1,2条件的最小数量(节约闹革命嘛)
输入
输入包含三个正整数a,b,c,表示每个组正在加班的人数,用空格分开 (a,b,c均小于30)。
输出
输出一个正整数,表示每袋中核桃的数量,不要输出多余的信息。
样例输入
30 12 9
样例输出
180
辗转相除法求得最大公约数,再两两求最小公倍数
#include <iostream>
using namespace std;
int zhanzhuan(int x,int y);
int main()
{
int x,y,z;
int f1,f2;
cin>>x>>y>>z;
f1=x*y/zhanzhuan(x,y);
f2=f1*z/zhanzhuan(f1,z);
cout<<f2<<endl;
return 0;
}
int zhanzhuan(int x,int y)
{
int t,s;
if(y>x)
{
t=x;
x=y;
y=t;
}
while(y!=0)
{
s=y;
y=x%y;
x=s;
}
return x;
}
ASCII码排序
时间限制:3000 ms | 内存限制:65535 KB
难度:2
描述
输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符。
输入
第一行输入一个数N,表示有N组测试数据。后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成,之间无空格。
输出
对于每组输入数据,输出一行,字符中间用一个空格分开。
样例输入
2
qwe
asd
样例输出
e q w
a d s
#include<stdio.h>
int main()
{
char a[3];
int n,i,j,t;
scanf("%d ",&n);
while(n--)
{
gets(a);
//a[i]=getchar();
for(i = 0; i<3; i++)
for(j = 0; j<3-i-1; j++)
{
if(a[j]>a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
for(i=0;i<3;i++)
printf("%c ",a[i]);
printf("\n");
}
return 0;
}
问题描述
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。
#include <stdio.h>
int main()
{
long n,i;
long f1,f2,f=1;
f1=1,f2=1;
scanf("%ld",&n);
if(1 <= n <= 1000000)
{
for(i=2;i<n;i++)
{
f=(f1+f2)%10007;
f1=f2%10007;
f2=f;
}
printf("%ld ",f);
}
return 0;
}
问题描述
给定圆的半径r,求圆的面积。
输入格式
输入包含一个整数r,表示圆的半径。
输出格式
输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积。
说明:在本题中,输入是一个整数,但是输出是一个实数。
对于实数输出的问题,请一定看清楚实数输出的要求,比如本题中要求保留小数点后7位,则你的程序必须严格的输出7位小数,输出过多或者过少的小数位数都是不行的,都会被认为错误。
实数输出的问题如果没有特别说明,舍入都是按四舍五入进行。
样例输入
4
样例输出
50.2654825
数据规模与约定
1 <= r <= 10000。
提示
本题对精度要求较高,请注意π的值应该取较精确的值。你可以使用常量来表示π,比如PI=3.14159265358979323,也可以使用数学公式来求π,比如PI=atan(1.0)*4。
#include <stdio.h>
#define PI 3.14159265358979323
#define NUM 100000000
int main()
{
double r,s;
scanf("%lf",&r);
s=((PI*r*r)*NUM+0.5)/NUM;
printf("%.7lf",s);
return 0;
}
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
#include <stdio.h>
int main()
{
int n,sum=0;
scanf("%d",&n);
char h[100000],o[100000];
while(n--)
{
scanf("%s",h);
int i,t;
for(i=0;h[i]!='\0';i++)
{
if(h[i]<='9')
t=h[i]-'0';
else
t=h[i]-'a'+10;
sum=sum*16+t;
}
//printf("%d\n",sum);
int j=0;
while(sum!=0)
{
o[j]=sum%8;
j++;
sum=sum/8;
}
for(i=j-1;i>=0;i--)
{
if(o[i]<8)
printf("%d",o[i]);
else
printf("%d",o[i]-8);
}
printf("\n");
}
}