目录
反向输出数字(数组)
#include <iostream>
#include<iomanip>
using namespace std;
int main()
{
long n;
while (cin >> n)
{
int a[5];
int i = 0;
int j = 0;
for (i = 0; n >= 1; i++)
{
a[i] = n % 10;
n = n / 10;
}
cout << i << endl;
for (j = i - 1; j >= 0; j--)
{
if (j != i-1) cout << " "; //注意好这里的条件!!
cout << a[j];
}
cout << endl;
for (j = 0; j <i; j++) //注意数组的下标是比长度少一的!!
{
cout << a[j];
}
cout << endl;
}
return 0;
}
阶乘求和
#include <iostream>
using namespace std;
int main()
{
int n;
while (cin >> n)
{
long long sum = 0, a = 1;
for (int i = 1; i <= n; i++)
{
a = a * i;
sum = sum+a;
}
cout << sum << endl;
}
return 0;
}
注意数据溢出!!!!!!!要设置为long long!!!!
求和训练
#include <iostream>
#include<iomanip>
using namespace std;
int main()
{
int a,b,c;
while (cin >> a>>b>>c)
{
int suma = 0, sumb = 0;
int aa = 0, bb = 1;
float cc = 0;
float sumc = 0, sum = 0;
for (int i = 1; i <= a; i++)
{
suma += i;
}
for (int i = 1; i <= b; i++)
{
sumb += i*i;
}
for (float i = 1; i <= c; i++)
{
sumc += 1.0/i; //!!!!!
}
sum = suma + sumb + sumc;
cout << fixed << setprecision(2) << sum << endl;
}
return 0;
}
类似的递增求和:sum1+=(每一项是什么),每一项通过i来实现
注意i的类型
输出水仙花数
#include <iostream>
#include<iomanip>
using namespace std;
int main()
{
for (int i = 100; i <= 999; i++) //限制三位数
{
int n = i; //注意这个n很关键!!!!!!
int a = 0, b = 0, c = 0;
int sum = 0;
c = i % 10;
i = i/10;
b = i % 10;
i = i/10; //i的值被改变了!!所以输出n!!!
a = i % 10;
sum = a * a * a + b * b * b + c * c * c;
if (n == sum)
{
cout << n << endl;
}
i = n;
}
return 0;
}
倘若不用n,那么式子一步到位即可,比如c=i%10,b=(i/10)%10,a=i/100
完数的判断
#include <iostream>
#include<iomanip>
using namespace std;
int main()
{
int n;
while (cin >> n)
{
for (int i = 1; i <= n; i++) //一个数,i的值才是这个数字!!
{
int a[1000];
int sum = 0,x=0;
for (int j = 1; j <=i-1; j++) //找它的因子并储存
{
if (i % j == 0)
{
x++; //因子的个数
a[x]=j; //将因子存入数组
sum += j; //因子加起来
}
}
if (sum == i) //判断输出条件
{
cout << i << " its factors are";
for (int k = 1; k <= x; k++)
{
cout << " " << a[k];
}
cout << endl;
}
}
}
return 0;
}
注意各部分功能的关系!!!并列or包含
短信计费
#include <iostream>
#include<iomanip>
using namespace std;
float cost(int);
int main()
{
int n;
while (cin >> n)
{
int num = 0;
float sum = 0;
for (int i = 1; i <= n; i++)
{
cin >> num;
sum += cost(num);
}
cout << fixed << setprecision(1) << sum << endl;
}
return 0;
}
float cost(int Nwords)
{
if (Nwords <= 70) return 0.1;
if (Nwords > 70)
{
if (Nwords % 70 == 0) return Nwords / 70 * 0.1; //注意这里哦!!!140和142字的钱是不一样的!!!
else return (0.1 + (Nwords / 70) * 0.1);//这个式子很巧妙很巧妙,我只能说快点记住
}
}
计算数列的前n项和
#include <iostream>
#include<iomanip>
using namespace std;
int main()
{
int n; //要计算的项数
while (cin >> n)
{
int a0 = 2, a1 = 3;//分子的第一、第二项
int b0 = 1, b1 = 2; //分母的第一、第二项
double sum=3.5; //前两项的和
int aa=0, bb=0; //分子、分母的每一项
double cc = 0; //每一项
for (int i = 3; i <= n; i++) //您是从第三项开始加的,i要设置好哦!!!!
{
aa = a0 + a1;//分子计算
a0 = a1;
a1 = aa;
bb = b0 + b1;//分母计算
b0 = b1;
b1 = bb;
cc = aa*1.0 / bb*1.0; //转换为浮点型!!!
sum += cc;
}
cout <<fixed<<setprecision(2) << sum << endl;
}
return 0;
}
猴子吃桃
#include <iostream>
#include<iomanip>
using namespace std;
int main()
{
int n;//第n天,只剩下一个桃子
while (cin >> n)
{
int sum = 1; //倒推法!!!
for (int i = n-1; i >= 1; i--) //第n天并没有吃,第一天到第n-1天吃了
{
sum = (sum + 1) * 2; //不用累加!!!
}
cout << sum << endl;
}
return 0;
}
自由落体路程和弹起高度
#include <iostream>
#include<iomanip>
using namespace std;
int main()
{
int m,n;
while (cin >> m>>n)
{
double sumup = 0, sumdown = m,sum=0; //第n次落地时反弹的高度和下降的高度
double down = 1,up=1;
//计算下降的高度
for (int j = 1; j <= n-1; j++) //2的n次方
{
down *= 2;
sumdown += m/down;
}
//计算反弹的高度
for (int j = 1; j <= n; j++) //2的n次方
{
up *= 2;
sumup += m / up;
}
sum = sumup + sumdown-m/up;
cout << fixed << setprecision(2) << m/up << " ";
cout << fixed << setprecision(2) << sum << endl;
}
return 0;
}
找规律!!! 列出规律!!!得出式子!!!
打印等腰直角三角形
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
int n;//边长
char ch;
while (cin >> n >> ch)
{
double l = 0;//直角边长
if (ch == 'R')
{
for (int i = 1; i <= n; i++) //i可看作行数,也可以说是次数
{
for (int j = 1; j <= i; j++) //输出符号
{
cout << "*";
}
for (int j = n-i-1; j >= 0; j--) //差值是输出的空格的个数!!!
{
cout << " ";
}
cout << endl;
}
}
if (ch == 'L')
{
for (int i = 1; i <= n; i++)
{
for (int j = n - i-1; j >=0; j--)
{
cout << " ";
}
for (int j = 1; j <= i; j++) //输出符号
{
cout << "*";
}
cout << endl;
}
}
l = sqrt(n*n*2); //计算直角边长
cout << fixed << setprecision(4) << l << endl;
}
return 0;
}
递归式子计算平方根
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
int a;
while (cin >> a)
{
double x0=1.0, x1=0;
while(1)
{
x1 = (x0 + a / x0) / 2.0;
if (fabs(x1 - x0) < 1e-5) break; //判断输出条件
x0 = x1; //递归
}
cout<< fixed << setprecision(3) << x1 << endl;
}
return 0;
}