C++ 常用练习小例子
1、判断一个数是奇数还是偶数
#include <iostream>
using namespace std;
int main()
{
int n;
cout << "输入一个整数: ";
cin >> n;
if ( n % 2 == 0)
cout << n << " 为偶数。";
else
cout << n << " 为奇数。";
return 0;
}
2、判断输入年份是否为闰年
不是整百的年份只要被4整除的就是闰年,整百的年份必须得被400整除才是闰年。
#include <iostream>
using namespace std;
int main()
{
int year;
cout << "输入年份: ";
cin >> year;
if (year % 4 == 0)
{
if (year % 100 == 0)
{
// // 这里如果被 400 整除是闰年
if (year % 400 == 0)
cout << year << " 是闰年";
else
cout << year << " 不是闰年";
}
else
cout << year << " 是闰年";
}
else
cout << year << " 不是闰年";
return 0;
}
3、九九乘法表
#include<iostream>
using namespace std;
int main()
{
for (int i = 1; i < 10; i++)
{
for (int j = 1; j <= i; j++)
{
cout << j << "x" << i << "=" << j*i << "\t" ;
}
cout << endl;
}
return 0;
}
4、求两个整数的最大公约数和最小公倍数
最大公约数:也称最大公因数、最大公因子,指两个或多个整数共有约数中最大的一个。
最小公倍数:两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。
辗转相除法求最大公约数算法
两整数a和b
①a/b得余数r(0<=r)
②若 r= 0,算法结束;b 即为答案。
③互换:置 a←b,b←r,并返回第①步。
求出最大公因数后,最小公倍数求法就比较简单了,用a*b/gcd(a,b)即可。
辗转相除法求最大公约数源码如下:
#include <iostream>
using namespace std;
// 求最大公约数
int gcd(int a, int b)
{
int r;
// 辗转相除法 直到a%b==0
// 返回b,b就是最大公因数
while (a % b != 0)
{
r = a % b;
a = b;
b = r;
}
return b;
}
int main()
{
cout << "请输入两个整数:" ;
int a, b;
cin >> a >> b;
cout << "最大公约数:" << gcd(a, b) << endl;
cout << "最小公倍数数:" << a*b/gcd(a, b) << endl;
return 0;
}
辗转相除法求最大公约数算法,使用递归写法:
核心:
若 r 是 a ÷ b 的余数,且r不为0, 则gcd(a,b) = gcd(b,r)
辗转相除法求最大公约数使用递归写法源码如下:
#include <iostream>
using namespace std;
// 辗转相除法求求最大公约数递归写法
int gcd(int a, int b)
{
if (a % b == 0)
{
return b;
}
else
{
return gcd(b, a % b);
}
}
int main()
{
cout << "请输入两个整数:" ;
int a, b;
cin >> a >> b;
cout << "最大公约数:" << gcd(a, b) << endl;
cout << "最小公倍数数:" << a*b/gcd(a, b) << endl;
return 0;
}
5、将一个正整数分解质因数
算法:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
源码如下:
#include<iostream>
using namespace std;
int main()
{
int mun;
cout << "请输入一个正整数" << endl;
cin >> mun;
cout << mun << "=";
for (int i = 2; i <= mun; i++)
{
while (i != mun)
{
if (mun % i == 0)
{
cout << i << "*";
mun = mun / i;
}
else
{
break;
}
}
}
cout << mun;
return 0;
}
6、斐波那契数列
斐波那契(fibonacci)数列下一个数字是前两个数字的总和,例如:0,1,1,2,3,5,8,13,21等。斐波那契数列的前两个数字是:0和1。
不使用递归实现斐波那契数列,源码如下:
#include <iostream>
using namespace std;
int main() {
int n1=0,n2=1,n3,i,number;
cout<<"输入元素的项数(>=2): ";
cin>>number;
cout<<n1<<" "<<n2<<" "; //输出第1项0和第2项 1
//循环从2开始
for(i=2;i<number;++i)
{
n3=n1+n2;
cout<<n3<<" ";
n1=n2;
n2=n3;
}
return 0;
}
用递归实现斐波那契数列,源码如下:
#include<iostream>
using namespace std;
void printFibonacci(int n){
static int n1=0, n2=1, n3;
if(n>0){
n3 = n1 + n2;
n1 = n2;
n2 = n3;
cout<<n3<<" ";
printFibonacci(n-1);
}
}
int main(){
int n;
cout<<"输入元素的项数(>=2): ";
cin>>n;
cout<<"0 "<<"1 "; //输出第1项0和第2项 1
printFibonacci(n-2); //n-2,因为已经打印了2个数字
return 0;
}
7、用1、2、3、4个数字能组成多少个互异的三位数
用1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?并具体列出来。
源码如下:
#include <iostream>
using namespace std;
int main() {
int i,j,k,a=0;
for (i=1;i<=4;i++) {
for (j=1;j<=4;j++) {
for (k=1;k<=4;k++) {
if(i!=j&&i!=k&&j!=k) {
a++;
cout<<i*100+j*10+k<<" ";
}
}
}
}
cout<<endl<<a<<"个"<<endl;
}