//素数********************************************************************************************
#include<iostream>
#include<cmath>
using namespace std;
bool function(int n) {
if (n == 2 || n == 3)
return true;
else {
for (int i = 2; i <= sqrt(n); i++)//查看从2到(根号n)是否有它的因数
if (n % i == 0)
{
return false;
}
return true;
}
}
#include<iostream>
using namespace std;
bool f(int n)
{
int i;
for (i = 2; i < n; i++)
{
if (n % i == 0)
break;
}
if (i == n)
return true;
else
return false;
}
#include<iostream>
using namespace std;
bool f(int n)
{
int i;
for (i = 2; i < n; i++)
{
if (n % i == 0)
break;
}
if (i == n)
return true;
else
return false;
}
******************************
bool isPrime(int a)
{
if (a < 2)
{
return false;
}
for (int i = 2; i <= sqrt(a); i++)
{
if (a % i == 0)
{
return false;
}
}
return true;
}
//斐波那契数列****************************************************************************************************
#include<iostream>
using namespace std;
int f(int n)
{
if (n == 0)
return 0;
else if (n == 1 || n == 2)
return 1;
else
return f(n - 1) + f(n - 2);
}
********************************************
#include<iostream>
using namespace std;
int main()
{
int a=1, b=1,k; cin >> k;
for (int i = 3; i <=k; ++i)
{
int c = a + b;
a = b;
b = c;
}
cout << b<<endl;
return 0;
}
//n的阶乘*********************************************************************************************
#include<iostream>
using namespace std;
int fac(int n)
{
if (n == 0 || n == 1)
return 1;
return n * fac(n - 1);
}
**********************************************
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
auto fac = [=]()->int {
int f = 1;
for (int i = 1; i <= n; i++)
{
f = f * i;
}
return f;
};
cout << fac() << endl;
return 0;
}
//小牛问题*********************************************************************************************
//若一头小母牛,从出生起第四个年头开始每年生一头母牛,按此规律,第n年时有多少头母牛。
#include<iostream>
using namespace std;
int f(int n)
{
if (n < 4)
return 1;
return f(n - 1) + f(n - 3);//若年数大于等于4,则今年的数量等于去年的加上三年前的(因为第四年生1头)
}
int main()
{
int n;
cin >> n;
cout << f(n) << endl;
return 0;
}
//幂函数************************************************************************************************
#include<iostream>
using namespace std;
double f(double x, int n)
{
if (n == 0)
return 1;
return x * f(x, n - 1);
}
//1^k +2^k +……+n^ k,其中求n^k用函数实现。************************************************************
#include<iostream>
using namespace std;
int f(int n, int k)
{
if (k == 0)
return 1;
return n * f(n, k - 1);
}
int main()
{
int n, k;
cin >> n >> k;
int s = 0;
for (int i = 1; i <= n; i++)
{
s += f(i, k);
}
cout << s << endl;
return 0;
}
//逆序求和***************************************************************************************************************
//从键盘输入一组整数(以0结束),计算这组整数逆序后之和。其中将一个整数逆序用函数实现,整数123逆序为321、整数-345逆序为-543。
#include<iostream>
using namespace std;
int f(int a)
{
int t = 1;
if (a < 0)
{
a = -a;
t = -1;
}
int s = 0;
while (a)
{
s = s * 10 + a % 10;
a = a / 10;
}
return s * t;
}
int main()
{
int n, s = 0;
cin >> n;
while (n)
{
s += f(n);
cin >> n;
}
cout << s << endl;
return 0;
}
//数位计算********************************************************************************************************************
//输入一组正整数(以0结束),输出其中数位之和为奇数的整数。其中求一个数的数位之和用函数实现。
//数根问题递归求解********************************************************************************************************************************************************
//输入n个正整数(输入格式中第一个为整数个数n,后续为n个整数),输出各个数的数根。要求计算一个数的数根部分利用递归函数实现。 (数根的定义:对于一个正整数n,我们将它的各个位相加得到一个新的数字,如果这个数字是一位数,我们称之为n的数根,否则重复处理直到它成为一个一位数,这个一位数也算是n的数根。)
#include<iostream>
using namespace std;
int f(int n)
{
int t = n;
int s = 0;
if (t < 10)
return t;
else
{
while (t)
{
s += t % 10;
t = t / 10;
}
return f(s);
}
}
int main()
{
int n, x, i;
cin >> n;
for (i = 0; i < n; i++)
{
cin >> x;
cout << f(x) << " ";
}
return 0;
}
//利用一个自定义函数解决完数和素数问题
//编写一个函数求一个数的所有因子之和。 主函数中输入两个整数m、n,利用该函数依次实现下列问题:1)找出n以内所有完数; 2)找出m~n间所有素数 (提示:完数定义为除自身外的所有因子之和等于它本身的数;素数定义为除了能被1和自身整数外,不能被其它数整数。注意:完数和素数分2行显示。)
#include<iostream>
using namespace std;
int f(int n)
{
int i, s = 0;
for (i = 1; i <= n; i++)
{
if (n % i == 0)
s += i;
}
return s;
}
int main()
{
int m, n, i;
cin >> m >> n;
for (i = 1; i <= n; i++)
{
if (f(i) - i == i)
cout << i << " ";
}
cout << endl;
for (i = m; i <= n; i++)
{
if (f(i) == 1 + i)
cout << i << " ";
}
return 0;
}
//fibonacci数列倒数求和
//算1 + 1 + 1 / 2 + 1 / 3 + 1 / 5 + 1 / 8 + …,当最后一项小于e(用户输入)时结束。提示各项的分母为fibonacci数列:0,1, 1, 2, 3, 5, 8, 。。。,其中第0项为0。要求:求fibonacci数列第n项写成递归函数。
#include<iostream>
using namespace std;
int f(int n)
{
if (n == 0)
return 0;
if (n == 1 || n == 2)
return 1;
return f(n - 1) + f(n - 2);
}
int main()
{
double s = 0;
int i = 1;
double e;
cin >> e;
while ((1.0 / f(i)) >= e)
{
s += (1.0 / f(i));
i++;
}
cout << s << endl;
return 0;
}
**************************************************************************************
冒泡排序
void bubblesort(int a[]) //haihui还会用冒泡算法好好好 偷学
{
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 4; j++)
{
if (a[j] > a[j + 1])
{
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
***********************************************************************************
经常会遇到一大段数字中间要有空格最后不用输出空格的情况该怎么处理最简单呢
for (int i = 0; i < n; i++)
{
if (i == 0)
{
cout << a[i];
}
else
{
cout << " " << a[i];
}
}
**********************************************************************
大写字母函数 小写字母函数 数字函数
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
cin >> a;
for (int i = 0; i < a.length(); i++)
{
if (a[i] >= 'A' && a[i] <= 'Z') //if (isupper(a[i]))
{
a[i] += 32; //a[i] = tolower(a[i]);
}
else if (a[i] >= 'a' && a[i] <= 'z') //else if (islower(a[i]))
{
a[i] -= 32; //a[i] = toupper(a[i]);
}
else if (a[i] >= '0' && a[i] <= '9') //else if (isdigit(a[i]))
{
a[i] = '0' + '9' - a[i];
}
}
cout << a;
return 0;
}
************************************************************************
阶乘的和
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n,sum=0,J=1; cin >> n;
for (int i = 1; i <= n; ++i)
{
J *= i;
sum += J;
}
cout << sum << endl;
return 0;
}
***************************************************************************
逆序
#include <iostream>
using namespace std;
int main()
{
int a, b = 0;
cin >> a;
for (;;)
{
if (a == 0)
{
cout << b;
break;
}
else
{
int c;
c = a % 10;
a = a / 10;
b = b * 10;
b = b + c;
}
}
}
******************************************************************
大写转小写
if (i < a.size() && a[i] < 'a') a[i] = tolower(a[i]);
if (i < b.size() && b[i] < 'a') b[i] = tolower(b[i]);
****************************************************************
爬楼梯(每次爬一层或者两层)到第n层的时候的方法有多少种——————斐波那契数列
#include <iostream>
#include <string>
using namespace std;
int f[50];
int c(int n)
{
f[0] = 1; f[1] = 1;
for (int i = 2; i <= n; ++i)
{
f[i] = f[i - 1] + f[i - 2];
}
return f[n];
}
int main()
{
int n; cin >> n;
cout << c(n) << endl;
}
***************************************************************************
拿硬币
(coins[i]+1)/2
***************************************************************************
int F(int y, int m, int d) {
int months[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int days = 0;
for (int year = 1; year < y; ++year) {
days += isLeapYear(year) ? 366 : 365;
}
for (int month = 1; month < m; ++month) {
days += months[month - 1];
if (month == 2 && isLeapYear(y)) {
days += 1;
}
}
days += d - 1;
return days;
}
**********************************************************************
大数阶乘!!!!!!!!
#include <bits/stdc++.h>
using namespace std;
int a[20001];
int main()
{
int temp, digit=1, n;
scanf("%d", &n);
a[0] = 1;
for (int i = 2; i <= n; i++){
int num = 0;
for (int j = 0; j < digit; j++){
temp = a[j] * i + num;
a[j] = temp % 10;
num = temp / 10;
}
while (num){
a[digit] = num % 10;
num = num / 10;
digit++;
}
}
for (int i = digit - 1; i >= 0; i--) printf("%d", a[i]);
}
**********************************************************************************
emm可能是考点吧(应该会持续更新)23.11.16晚
于 2023-10-20 22:53:25 首次发布