目录
此题我设定的x=2
#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
float fn(int n, int x) {
if (n > 1)
return sqrt(n + fn(n - 1, x));
else
return sqrt(1 + x) ;
}
int main() {
float c = fn(3, 2);
float d = sqrt(3 + sqrt(2 + sqrt(3)));//验证
cout << c << endl << d << endl;
}
=========================================================================
斐波那契数列(Fibonacci Sequence),又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……。在数学上,斐波纳契数列以递推的方法定义为:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N)。
(一)递归计算斐波那契数列第n项的值。
#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
float fn(int n) {
if (n > 2) {
return fn(n - 1) + fn(n - 2);
} else
return 1 ;
}
int main() {
int c = fn(7);
cout << c << endl;
}
=========================================================================
指针
调用函数交换两数的值。
void ch(int *p1, int *p2) {
int p3;
p3 = *p1;
*p1 = *p2;
*p2 = p3;
}
int main() {
int a = 20, b = 10;
cout << &a << endl << &b << endl;
ch(&a, &b);
cout << &a << endl << &b << endl;
}
循环
字母金字塔
void cha_loop2() {
char a = 0;
//a='Z';
cin >> a;
for (char i = 'A'; i <= a; i++) {
for (int k = int(a - 'A') - i + 65; k >= 0; k--) //固定宽度递减
cout << " ";
for (char j = i; j >= 'B'; j--)
cout << j; //左边
for (char j = 'A'; j <= i; j++) //右边
cout << j;
cout << endl;
}
}
=========================================================================
数字金字塔;两个数以内:
tip:先打印空格,在打印数字。打印所占的格式注意一下
#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
int main() {
int i, j, k, n;
cin >> n;
for (i = 1; i <= n; i++) { //控制输出的行数
for (j = n; j > i; j--) {
printf(" "); //控制输出的空格
}
for (k = 1; k <= (2 * i + 1) / 2; k++) {
printf("%3d", k);
}
for (k = (2 * i + 1) / 2; k > 1; k--) {
printf("%3d", k - 1);
}
printf("\n");
}
}
=========================================================================
固定高度为height的小球下落,每次反弹高度为原来的一半,求反弹n次后的高度和路程
void drop() {
int t = 0, k = 0;
float h, s, m = 0;
cin >> h >> k;
m = s = h;
while (t++ != k) {
m = m / 2;
s = s + m * 2;
cout << "路程:" << s << endl;
cout << "高度:" << m << endl;
}
cout << "路程:" << s << endl;
cout << "高度:" << m << endl;
=========================================================================
判断回文数
void back_number() {
int a, a2, b = 0, n = 0;
cin >> a; //变数
a2 = a; //不变数
while (a > 0) {
n = a % 10; //得到个位
cout << "a:" << n << endl;
b = b * 10 + n; //原来的与现在的相加
a /= 10;
cout << "b:" << b << endl;
}
if (a2 == b) {
cout << "是回文数" << endl;
}
}
=========================================================================
10进制转2进制
int main() {
int n, re, de = 0, i = 1;
printf("输入一个十进制数: ");
scanf("%d", &n);
while (n > 0) {
re = n % 2;
de = de + re * i;
n /= 2;
i *= 10;
}
cout << de;
return 0;
}
=========================================================================
菱形
for (int i = 1; i <= a; i++) {
for (int j = a; j > i; j--) {
cout << " ";
}
for (int j = i ; j >= 1; j--) {
cout << "*";
}
for (int j = i - 1; j >= 1; j--) {
cout << "*";
}
cout << endl;
}
a--;
for (int i = a; i >= 1; i--) {
for (int j = a - i; j >= 0; j--) {
cout << " ";
}
for (int j = i; j >= 1; j--) {
cout << "*";
}
for (int j = i - 1; j >= 1; j--) {
cout << "*";
}
cout << endl;
}
}
排序
冒泡排序
int main() {
int n = 5;
float a[n] = {0}, t;
for (int i = 0; i < n; i++)
cin >> a[i];
int i, j, temp;
for (j = 0; j < n - 1; j++) {
for (i = 0; i < n - 1 - j; i++)
if (a[i] > a[i + 1]) {
t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
}
for (int i = 0; i < n; i++)
cout << a[i] << " ";
return 0;
}
其他题目
=========================================================================
输入n个字符串,按照字符串的长度从大到小顺序输出
#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
struct A {
char inp[100];
int len;
int order;
} a[100];
int lenth(char *a) {
int n = 0;
while ((*a) != '\0') {
n++;
a++;
}
return n;
}
int cmpn1(A a, A b) {
return a.len > b.len;
}
int main() {
int n;
cin >> n; //输入个数
for (int i = 0; i < n; i++)
cin >> a[i].inp; //输入字符串
for (int i = 0; i < n; i++) {
a[i].len = lenth(a[i].inp);
}//为结构体的长度元素赋值
for (int i = 0; i < n; i++) {
cout << a[i].len << endl;
}//打印长度元素(可以不要)
sort(a, a + 10, cmpn1);// 结构体的排序
cout << endl;
for (int i = 0; i < n; i++) {//按照拍好的顺序依次输出
cout << a[i].inp << endl;
}
}
=========================================================================
求两个数的最大公倍数:
方法一:定义法:从较大数开始自加,第一个出现的数既可以整除a,也可以整除b。
int main() {
int a, b, c, d, temp;
cin >> a >> b;
if (a > b) {
temp = a;
a = b;
b = temp;
}
for (int i = a; i > 0; i++)
if ((i % a == 0) && (i % b == 0)) {
cout << i;
break;
}
}
方法二:公式法:公倍min=a*b/公约max。
=========================================================================
最大公约数
int main() {
int a, b, c, d, temp;
cin >> a >> b;
if (a > b) {
temp = a;
a = b;
b = temp;
}
for (int i = a; i > 0; i--)
if ((a % i == 0) && (b % i == 0)) {
cout << i;
break;
}
}
=========================================================================
判断素数和质数,并在最后一排输出素数
int issushu(int a) {
int flag = 1;
if (a >= 2) { //检查大于2的数
for (int j = 2; j < a; j++) {
if (a % j == 0) {
flag = 0;
break;
}
}
if (flag == 1) {
// cout << a << endl;
return 1;//素数
}
else
return 0;//合数
}
}
int main() {
int a, count = 0;
cin >> a;
if(a<2) cin>>a; //限制输入
int arr[a] = {};
for (int i = 2; i <= a; i++) {
if (issushu(i)) {
cout << i << ":质数" << endl;
arr[count++] = i;
} else
cout << i << ":合数" << endl;
}
for (int i = 0; i < count; i++)
cout << arr[i] << " " ;
}
=========================================================================三个数从小大大排序
int a, b, c, t;
cin >> a >> b >> c;
if (a < b) {
t = a;
a = b;
b = t;
}
if (a < c) {
t = a;
a = c;
c = t;
}
if (b < c) {
t = b;
b = c;
c = t;
}
cout << a << endl << b << endl << c;
初级蓝桥杯试题
#include<bits/stdc++.h>
using namespace std;
int student(){
int n,x[55],b,l=-1,a,d[55],k[55]={1},z;
cin>>n;
for(int i=0;i<n;++i)
{
cin>>x[i];
}
for(int i=0;i<n;++i)
{
++l;
for(int j=0;j<n;++j)
{
if(b<x[j])
{
b=x[j];
}
}
a=x[n-l];
x[n-1]=b;
b=a;
d[i]+=1;
}
for(int i=0;i<n;++i)
{
z+=d[i]*k[i];
k[i]+=1;
}
return 0;
}
int my()
{
int static n,temp,sum;
cin>>n;
int num[n],cont[n];
//输入
for(int i=0;i<n;i++)
{
cin>>num[i];
}
//排序
for(int i=0;i<=n-1;i++)
for(int j=0;j<=n-1-j;j++)
{
if(num[j]>num[j+1])
{
temp=num[j];
num[j]=num[j+1];
num[j+1]=temp;
//计数交换
temp=cont[j];
cont[j]=cont[j+1];
cont[j+1]=temp;
cont[j]++;
cont[j+1]++;
}
}
for(int i=0;i<=n-1;i++)
{
cout<<num[i]<<" ";
}
cout<<endl;
//计算和
for(int i=0;i<=n-1;i++)
{
cout<<cont[i]<<" ";
}
cout<<endl;
for(int i=0;i<=n-1;i++)
{
for(int j=cont[i];j>=1;j--)
{
sum+=j;
}
}
cout<<sum;
}
int main()
{
my();
}
================================================================
输入两组数组,使每个数组元素的内容大小相应,把对应的位置和内容都输出
int main() {
int n, m; //输入个数
int t = 0;
cin >> n;
int a[n], b[n] = {}, a1[n] = {}, a2[n] = {};
for (int i = 0; i < n; i++) {
cin >> a[i];
}
for (int i = 0; i <= (n - 1) / 2; i++) {
for (int j = i + 1; j < n; j++) {
if (a[i] == a[j]) {
a1[t] = i + 1;
a2[t] = j + 1;
b[t] = a[j] ;
t++;
}
}
}
for (int j = 0; j < t ; j++) {
cout << b[j] << " ";
cout << "位置" << a1[j] << "和位置" << a2[j] << "相同" << endl;
}
}