#include <iostream>
#include <bits/stdc++.h>//万能头文件
#include <string.h>
#define PI 3.141593
typedef int KeyType;
typedef float ElementType;
using namespace std;
typedef struct
{ KeyType key;
} ElemType;
typedef struct
{ ElemType *R;
int length;
} SSTable;
void Create(SSTable &T)
{ int i;
T.R=new ElemType[MAXSIZE+1];
cin>>T.length;
for(i=1;i<=T.length;i++)
cin>>T.R[i].key;
}
bool max(int a,int b,int c) { //a是否为最大值
if (a>=b&&a>=c) return true;
else return false;
}
bool min(int a,int b,int c) { //a是否为最小值
if(a<=b&&a<=c) return true;
else return false;
}
int gcd(int a,int b) { //最大公约数
for(int i = a; i>0; i--) {
if(a%i == 0&&b%i == 0) {
return i;
}
}
return 1;
}
long long jie(int n) { //阶乘
if(n>1)
return n*jie(n-1);
else if(n == 1) return 1;
else if(n < 0) return -1;
else return 0;
}
int countDigit(int n, int digit) { //digit在n中出现的次数
int count = 0;
for(n; n>=1; n/=10) {
if(n%10 == digit) count++;
}
return count;
}
double Sn(int n) { //求1/n级数前n项和
double sum = 0.0;
for(int i=1; i<=n; i++) {
sum += 1.0/i;
}
return sum;
}
bool zhishu(int n) { //判断是否为质数
for(int i=2; i<n; i++) {
if(n%i==0) return false;
}
return true;
}
bool huiwen(int n) { //判断是否是回文
char a[100];
int i=0;
while(n>0) {
a[i++] = n%10-'0';
n/=10;
}
int j=0;
i=i-1;
while(1) {
if(i == j) break;
else if(i-1 == j){
i--;
break;
}
if(a[i]==a[j]) {
j++;
i--;
} else break;
}
if(i == j) return true;
else return false;
}
double Fn(int n) { //原始斐波那契
double a,b,c;
c=sqrt(5);
a=(1+c)/2.0;
b=(1-c)/2.0;
a=pow(a,n);
b=pow(b,n);
return (a-b)/c;
}
int fib(int n) { //递归斐波那契
if(n==0) return 0;
else if(n==1) return 1;
else if(n>1) return fib(n-1)+fib(n-2);
}
int reverse(int n){ //整数逆转
{
int a;
n>0?(a=n):(a=-n);
int sum=0,temp;
while(a>0){
temp=a%10; //取低位
a/=10; //右移一位
sum = sum*10+temp;
}
return n>0?sum:-sum;
}
}
void swap(int &a,int&b){ //swap函数(引用)
int temp;
temp=a;
a=b;
b=temp;
}
int bubble(int a[],int n){ //冒泡排序
for(int i=0;i<n-1;i++){
bool flag=false;
for(int j=0;j<n-i-1;j++){
if(a[j]>a[j+1])
{
swap(a[j],a[j+1]);
flag = true;
}
if(flag == false) return 0;
}
}
return 0;
}
int combination(int n,int k){ //Ckn组合数
if(n==k||k==0){
return 1;
}
else if(n<k || n<0 || k<0) return -1;
else return combination(n-1,k-1) + combination(n-1,k);
}
void yanghui(int n){ //杨辉三角形
for(int i=0;i<n;i++){
for(int j=0;j<=i;j++){
cout << combination(i,j)<<" ";
}
cout << endl;
}
}
double dis(double a1,double a2,double b1,double b2){ //求两坐标距离
double i=pow((b1-a1),2.0);
double j=pow((b2-a2),2.0);
return 1.0*sqrt(i+j);
}
double triangle_l(double a[3][2]){ //给出三点坐标求三角形周长
double l;
l = dis(a[0][0],a[0][1],a[1][0],a[1][1]) +
dis(a[0][0],a[0][1],a[2][0],a[2][1]) +
dis(a[1][0],a[1][1],a[2][0],a[2][1]);
return l;
}
int stringtoint(string s){ //string转int
int result = 0;
for(int i=0;i<s.length();i++){
if(s[i]>='0'&&s[i]<='9'){
result = result*10 + (s[i]-'0');
}
}
return result;
}
string inttostring(int a){ //int转string
string s;
int temp = 0;
int i;
if(a == 0) s='0';
else if(a<0){ //负数
a=-a; //变正数
s.insert(0,1,'-'); //第一位补负号
while(a>0){
temp = a%10;
s.insert(0,1,temp+'0');
a/=10;
}
}
else if(a>0){ //正数
while(a>0){
temp = a%10;
s.insert(0,1,temp+'0');
a/=10;
}
}
return s;
}
void PrintN ( int N ) { //打印从1到N
for(int i=1; i<=N; i++) {
cout << i <<endl;
}
}
ElementType Max( ElementType S[], int N ) { //求自定义数组的最大值
ElementType max = -9999.0;
for(int i=0; i<N; i++) {
if(S[i]>max) max = S[i];
}
return max;
}
long long jie(long long n){ //求阶乘
if(n==0||n==1) return 1;
else if(n>0) return n*jie(n-1);
else return 0;
}
void Print_Factorial (const int N ){ //打印阶乘
cout << jie(N);
}
ElementType Median( ElementType A[], int N ){ //求中位数
sort(A,A+N);
if (N % 2 == 1) // 如果数组长度为奇数
return A[N / 2]; // 返回中间的元素
else // 如果数组长度为偶数
return (A[N / 2 - 1] + A[N / 2]) / 2.0; // 返回中间两个元素的平均值
}
int Search_Bin(SSTable T, KeyType k){ //折半查找
int low,high,mid;
low = 1;
high = T.length; //首尾指针指向数列的首尾
while(low <= high){
mid = (low + high)/2;
if(T.R[mid].key == k) return mid;
else if(T.R[mid].key > k) high = mid-1;
else if(T.R[mid].key < k) low = mid+1;
}
return 0;
}
int IsTheNumber ( const int N ){ //判断是否是完全平方数又至少有两位数字相同
//先判断是否是完全平方数
int k = sqrt(N);
int n = N; //n是只读的
if(k*k == N){
//再判断至少两位数字相同
int a[10]={0}; //存每位数字出现的次数
int temp;
while(n>0){
temp = n%10; //取个位数
a[temp]++;
n/=10; //右移一位
}
for(int i=0;i<10;i++){
if(a[i] >= 2) return 1;
}
return 0; //是完全平方数但没有两位数字相同
}
return 0; //不是完全平方数
}
int Count_Digit ( const int N, const int D ){ //统计N中D出现的次数
if(N!=0){
int n=N; //N只读
int count=0;
int temp;
n=n<0?-n:n; //负数转成正数
while(n>0){
temp = n%10;
if(temp == D) count++;
n/=10;
}
return count;
}
else return 1;
}
int main() {
//测试区
return 0;
}
C++(简单算法+基础题)洛谷(入门+普及)PTA
于 2024-03-28 16:59:15 首次发布