复习基础算法。
#include<iostream>
#include<iomanip>
#include<cmath>
#include<ctime>
using namespace std;
#define INF 1000000000
#define maxn 105
//数组
int a[maxn];
//阶乘递归函数声明 //
int factorial(int n);
int main()
{
/* int n;
cin>>n;
for(int i=1; i<=n; i++)
cout<<i<<endl;
return 0;
*/
//2-1 完全平方数 ,意思是数a是数b的平方
//法一
/* int flag=0;
for(int i=1;i<10;i++)
for(int j=0;j<10;j++)
{
// floor(x)返回不超过x的最大整数
// sqrt(n) 对n开根号且四舍五入
int n = i*1100 + j*11;
int m = floor(sqrt(n) + 0.5);
if(m*m == n)
{
cout<<n<<endl;
flag++;
}
}
cout<<"总共"<<flag<<"个完全平方数"<<endl;
*/
//2-3 7744问题
//法二
/** for(int x=1; ; x++)
{
int n = x*x;
if(n < 1000) continue;
if(n > 9999) break;
int hi = n/100;
int lo = n%100;
if(hi/10 == hi%10 && lo/10 == lo%10)
cout<<n<<endl;
}
*/
// 2-4 3n+1问题
/* long long n;
int count = 0;
cin>>n;
while(n > 1)
{
if(n%2 == 1)
n = n*3 + 1;
else
n /= 2;
count++;
}
cout<<count<<endl;
*/
// 2-3 近似计算
/* double sum = 0;
//法一
for(int i=0; ;i++)
{
double result = 1.0/(i*2+1);
if(i%2 == 1)
sum -= result;
else
sum += result;
if(result < 1e-6)
break;
}
cout.setf(ios::fixed);
cout<<setprecision(7)<<sum<<endl;
//法二
double result = 0;
int i=0;
do{
result = 1.0/(i*2+1);
if(i%2 == 1)
sum -= result;
else
sum += result;
i++;
} while (result > 1e-6);
cout.setf(ios::fixed);
cout<<setprecision(7)<<sum<<endl;
*/
//2-4 阶乘之和
//前两种方法都有bug,会溢出
//法一
/* int n,sum = 0;
cin>>n;
for(int i=1; i<=n; i++)
{
int fac = 1;
for(int k=1; k<=i; k++)
fac *= k;
sum += fac;
}
cout<<sum%1000000;
//法二
int n,sum=0;
cin>>n;
for(int i=1; i<=n; i++)
{
sum += factorial(i);
}
cout<<sum%1000000; */
//法三
/* const int MOD = 1000000;
int n, sum=0;
cin>>n;
for(int i=1; i<=n; i++)
{
int factorial = 1; //阶乘的初始数
for(int j=1; j<=i; j++)
factorial = (factorial*j % MOD); //每步取模
sum = (sum + factorial) % MOD;
}
cout<<sum<<endl;
cout.setf(ios::fixed);
//加个定时器,CLOCK_PER_SEC以s为单位
cout<<"time used = "<<setprecision(2)<<(double)clock()/CLOCKS_PER_SEC<<endl;
*/
//数据统计2 (有bug,最大值和最小值没有重置 )
/* int x, n=0, s=0, kase=0; //kase为当前数据编号的计数器
while(scanf("%d",&n) == 1 && n)
{
int s=0, min=INF, max=-INF;
for(int i=0; i<n; i++)
{
scanf("%d",&x);
s+=x;
if(x < min) min = x;
if(x > max) max = x;
}
if(kase) printf("\n");
printf("Case %d: %d %d %.3f\n", ++kase, min, max, (double)s/n);
}
//2-1 水仙花数
for(int i=100; i<1000; i++)
{
int a=0, b=0, c=0, s=0;
a = i%100%10;
b = (i-a)/10%10;
c = (i-a-b)/100;
s = a + b*10 + c*100;
if(s == a*a*a+b*b*b+c*c*c)
cout<<s<<endl;
}
//韩信点兵
int a, b, c, x=0;
bool flag = true;
int n=1;
while(scanf("%d %d %d", &a,&b,&c) == 3)
{
for(int i=10;i<100;i++){
if(i%3==a && i%5==b && i%7==c)
{
cout<<i;
flag = false;
break;
} else {
if(!flag)
{
cout<<"No answer";
flag = true;
break;
}
}
}
}
//倒三角形
int n, f=0;
cin>>n;
for(int i=n;i>0;i--)
{
for(int j=1;j<2*i;j++)
{
cout<<"#";
}
cout<<endl;
f++;
for(int i=1;i<=f;i++)
{
cout<<" ";
}
}
//子序列的和
int n , m;
int kase=0;
while(scanf("%d %d",&n,&m)!=0)
{
double sum=0;
for(;n<=m;n++)
{
sum+=1.0/(n*n);
}
if(kase)
printf("\n");
printf("Case %d: %.5f",++kase,sum);
}
//分数化小数
int a,b,c;
int kase=0,flag=0;
while(scanf("%d %d %d",&a, &b, &c)!=0)
{
double sum = 0.0;
sum = 1.0*a/b;
if(kase)
printf("\n");
printf("Case %d: %.*lf\n",++kase,c,sum);
}
//数组逆序输出
int x, n=0;
while(scanf("%d", &x) == 1)
a[n++] = x;
for(int i=n-1; i>=0; i--)
{
cout<<a[i];
}
*/
return 0;
}
//阶乘
/*int factorial(int n){
if(n==0 || n==1)
return 1;
else
return n*factorial(n-1);
}
*/