1041 最大公约数 最小公倍数
求两个数的最大公约数和最小公倍数
#include <iostream>
#include<algorithm>
#include<string>
using namespace std;
int gcd(int a, int b)
{
if (b == 0)
return a;
else
return gcd(b, a%b);
}
int main()
{
int m, n;
cin >> m >> n;
cout << gcd(m, n) << " " << n * m / gcd(m, n) << endl;
return 0;
}
1042 字符个数
输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。
#include <iostream>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
string s;
while (getline(cin, s))
{
int i = 0;
int digit = 0, letter = 0, space = 0, other = 0;
for (i = 0; i < s.size(); i++) {
if (s[i] >= '0'&&s[i] <= '9')
digit++;
else if (s[i] >= 'a'&&s[i] <= 'z' || s[i] >= 'A'&&s[i] <= 'Z')
letter++;
else if (s[i] == ' ')
space++;
else
other++;
}
cout << letter << " " << digit << " " << space << " " << other << endl;
}
return 0;
}
1043计算Sn
求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。 例如:2+22+222+2222+22222(n=5),
#include <iostream>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
int a, n, i;
double sum = 0, t;
cin >> a >> n;
t = a;
for (int i = 1; i <= n; i++)
{
sum = sum + t;
t = t * 10 + a;
}
cout << sum << endl;
return 0;
}
1044阶乘和
求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字。
#include <iostream>
#include<algorithm>
#include<string>
using namespace std;
long fun(int n)
{
if (n == 1)
return 1;
else
return fun(n - 1)*n;
}
int main()
{
int n;
cin >> n;
long sum = 0;
for (int i = 1; i <= n; i++)
sum = sum + fun(i);
cout << sum << endl;
return 0;
}
1045 平方和与倒数和
求以下三数的和,保留2位小数 1~a之和 1~b的平方和 1~c的倒数和
#include<iostream>
using namespace std;
int main()
{
int a,b,c;
double sum=0;
cin>>a>>b>>c;
for(int i=1;i<=a;i++){
sum+=i;
}
for(int i=1;i<=b;i++){
sum+=i*i;
}
for(double i=1;i<=c;i++){
sum+=1/i;
}
printf("%.2f",sum);
}
1046完数
一个数如果恰好等于它的因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式输出其因子:
#include<iostream>
//#include<iomanip>
using namespace std;
void fun(int n)
{
int i,sum;
for(i=2;i<=n;i++)
{
sum=0;
for(int j=1;j<=i/2;j++)
{
if(i%j==0)
{
sum=sum+j;
}
}
if(sum==i)
{
cout<<i<<" its fastors are ";
for(int k=1;k<=i/2;k++)
{
if(i%k==0)
{
cout<<k<<" ";
}
}
cout<<endl;
}
}
}
int main()
{
int n;
cin>>n;
fun(n);
cout<<endl;
return 0;
}
1047 分数求和
有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13… 求出这个数列的前N项之和,保留两位小数。
#include <iostream>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
int n;
cin >> n;
double sum = 0, t, j = 2,k=1;
double temp;
for (double i = 1; i <= n; i++)
{
t = j / k;
sum = sum + t;
temp = j + k;
k = j;
j = temp;
}
printf("%.2lf\n", sum);
return 0;
}
1048 自由落体
一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时反弹多高?共经过多少米? 保留两位小数
#include <iostream>
#include<algorithm>
#include<string>
using namespace std;
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int m, n;
cin >> m >> n;
double num = m, sum = -m;
for (int i = 1; i <= n; i++) {
sum += num * 2.0;
num /= 2.0;
}
printf("%.2f %.2f\n", num, sum);
return 0;
}
1049 猴子吃桃
猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。
#include <iostream>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
int n, j=1; //第n天早上1个桃子
cin >> n;
for (int i = 1; i < n; i++)
{
j++;
j = j * 2;
}
cout << j << endl;
return 0;
}
1050 迭代平凡根
用迭代法求 。求数字a平方根的迭代公式为: X[n+1]=1/2(X[n]+a/X[n]) 要求前后两次求出的得差的绝对值少于0.00001。 输出保留3位小数
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{
int x;
double n;
cin>>x;
n=sqrt(x);
cout<<setiosflags(ios::fixed)<<setprecision(3)<<n<<endl;
return 0;
}
1051 日期计算
定义一个结构体变量(包括年、月、日),编程序,要求输入年月日,计算并输出该日
在本年中第几天。
#include <iostream>
#include<algorithm>
#include<string>
using namespace std;
struct Date
{
int year, month, day;
};
bool isyear(int year)
{
if (year % 400 == 0 ||( year % 4 == 0 && year % 100 != 0))
return true;
return false;
}
void fun()
{
int tab[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
Date d;
int days = 0;
while (cin >> d.year >> d.month >> d.day)
{
days = 0;
if (d.month <= 0 || d.month > 12 || d.day <= 0 || d.day > tab[d.month])
cout << "Input error!" << endl;
else {
for (int i = 1; i < d.month; i++)
days = days + tab[i];
if (isyear(d.year) && d.month > 2)
days++;
days += d.day;
cout << days << endl;
}
}
}
int main()
{
fun();
return 0;
}
1052 学生成绩管理
有N个学生,每个学生的数据包括学号、班级、姓名、三门课成绩。从键盘输入N 个
学生数据,要求打印出每个学生三门课的平均成绩,以及平均分最高分学生数据(包括学号、
班级、姓名、三门课成绩,平均分)。
要求:
1、 定义学生结构体。
2、 用一个函数实现N 个学生数据的输入,用另一个函数负责求每个学生三门课程的平
均成绩,再用一个函数求出平均分最高的学生并输出该学生的数据。要求平均分和平均分最
高的学生数据都在主函数中输出。
#include <iostream>
#include<algorithm>
#include<string>
#include<iomanip>
#define N 100
using namespace std;
struct Stu {
string num;
string clas;
string name;
float score[3];
}stu[N];
float average[N];
void input(int n) {
for (int i = 0; i < n; i++)
cin >> stu[i].num>>stu[i].clas>>stu[i].name>>stu[i].score[0]>>stu[i].score[1]>>stu[i].score[2];
}
void fun2(int n)
{
int max = 0,m=0;
for (int i = 0; i < n; i++)
{
average[i] = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3;
if (average[i] > max)
{
max = average[i];
m = i;
}
}
for (int i = 0; i < n; i++)
{
cout<<setiosflags(ios::fixed)<<setprecision(1) << stu[i].name << " " << average[i] << endl;
}
cout << setiosflags(ios::fixed) << setprecision(1)<<stu[m].num << ' ' << stu[m].clas << ' ' << stu[m].name << ' ' << stu[m].score[0] << ' ' << stu[m].score[1] << ' ' << stu[m].score[2] << ' ' << average[m] << endl;
}
int main()
{
int n;
cin >> n;
input(n);
fun2(n);
return 0;
}
1053 偷菜时间
假设当前时间为13:15,第一行输入作物种类数n,
从第二行开始输入n 种作物成熟需要的时间,格式为
Hour:Minute。
#include <iostream>
#include<algorithm>
#include<string>
#include<iomanip>
#define N 100
using namespace std;
int main()
{
int n;
cin >> n;
while (n--)
{
int a, b;
char mid;
cin >> a >> mid >> b;
int oa = 13, ob = 15;
if ((ob = ob + b) >= 60)
{
ob = ob - 60;
oa++;
}
oa += a;
cout << oa % 24 << mid << ob << endl;
}
return 0;
}
1055矩阵相乘
输出一个大小为3*3的距阵,矩阵每一行相邻的的两个数字之间由一个空格隔开。具体的请详见 Sample Output
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main(){
int a[3][3],b[3][3],c[3][3],i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>a[i][j];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>b[i][j];
int m,n,k;
int sum=0;
for(m=0;m<3;m++)
{
for(n=0;n<3;n++)
{
for(k=0;k<3;k++)
{
sum=sum+a[m][k]*b[k][n];
}
c[m][n]=sum;
sum=0;
}
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<<c[i][j]<<' ';
cout<<endl;
}
cout<<endl;
return 0;
}
1057 数字模式的识别
数字的模式是指在一堆给定数字中出现次数最多的数值,如5,5,5,3,3,2,6,4,它的模式就是5。现在你的任务,就是从数字中找到它的模式.
#include <iostream>
#include<algorithm>
#include<string>
#include<iomanip>
#define N 100
using namespace std;
long a[2000000] = { 0 };
int main()
{
long b[100];
int n, temp;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> b[i];
a[b[i]]++;
}
int max = 0;
for (int i = 0; i < n; i++)
{
if (a[b[i]] > a[b[max]])
max = i;
}
cout << b[max] << endl;
return 0;
}
1058 求组合数
输入n 和r 的值; 当用户输入0 0 时,程序结束。
输出描述:
根据公式: C(n,r) = C(n, r-1) * (n - r + 1) / r 输出运算结果 输入数据不满足题意时候,输出"error!"
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int fun(int n,int r)
{
if(r==1)
return n;
return
fun(n,r-1)*(n-r+1)/r;
}
int main(){
int a,b;
cin>>a>>b;
while(a!=0||b!=0)
{
if(a<b)
cout<<"error!"<<endl;
else
{
if(b==0)
{
cout<<1<<endl;
}
else
cout<<fun(a,b)<<endl;
}
cin>>a>>b;
}
return 0;
}
1059 阶乘问题
也许你早就知道阶乘的含义,N阶乘是由1到N相乘而产生,如: 12! = 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 = 479,001,600 12的阶乘最右边的非零位为6。 写一个程序,计算N(1<=N<=50,000,000)阶乘的最右边的非零位的值。 注意:10,000,000!有2499999个零。
#include <iostream>
using namespace std;
int f(long long n) {
while(n%10==0) n /= 10;
return n%1000000000;
}
int main() {
long long n,ans;
while(~scanf("%lld", &n)) {
ans = 1;
for (int i = 1; i <= n; i++) {
ans *= i;
ans = f(ans);
}
cout << ans%10 << endl;
}
return 0;
}