1. 输出1到100的和
#include <iostream>
using namespace std;
int main()
{
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
cout << "1到100的和为:" << sum ;
return 0;
}
2. 找出1到20内的所有质数
提示:质数是指大于1的自然数,除了1和它本身以外没有任何正因数(除了1和它本身外不能被其他整数整除)。换句话说,质数是只有两个正因数的数,这两个因数就是1和它自己。
#include <iostream>
using namespace std;
int main() {
for(int i = 2; i<=20; i++) {
bool b = true;
for(int j = 2; j<i; j++) {
if(i%j==0) {
b = false;
break;
}
}
if(b) {
cout<<i<<endl;
}
}
}
3. 打印乘法口诀表
4.水仙花数
-
水仙花数:指一个 n 位数(n≥3),它的每个位上的数字的 n 次幂之和等于它本身。例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。
-
题目:找出100~999整数中的所有水仙花数
结果示意图:
5. 打印棱形
结果:
#include<iostream>
using namespace std;
int main() {
// 上半部分
for(int i = 0; i < 4; i++) {
//添加空格
for (int j = 4; j > i+1; j--) {
cout<<" ";
}
for (int j = 0; j < 2*i+1; j++) {
cout<<"*";
}
cout<<endl;
}
// 下半部分
for(int i = 3; i > 0; i--) {
// 添加空格
for (int j = 4; j > i; j--) {
cout<<" ";
}
// 打印 "*"
for (int j = 0; j < 2 * i - 1; j++) {
cout << "*";
}
cout<<endl;
}
}
6. 冒泡排序
思路:
- 1.比较所有相邻的元素,如果第一个比第二个大,则交换他们。
- 2.一轮下来,可以保证最后一个数是最大的。
- 3.以此类推,执行n-1轮,就可以完成排序。
#include <iostream>
using namespace std;
int main() {
int a[4] = {
4,2,1,5};
int len = sizeof(a) / sizeof(a[0]);
for(int i = 0; i < len-1; i++) {
for(int j = 0; j < len-1-i; j++) {
if(a[j] > a[j+1]) {
int t;
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
for (int i = 0; i < len; i++) {
cout << a[i] << " ";
}
}
7. 选择排序
思路:
- 1.找到数组中的最小值,把他更换到列表中的第一位。(具体做法:先假设第一数为最小值,记录它的索引值,将第一数和第二个数作比较,如果第一个数大于第二个数则交换他们,此时最小值变为两者中较小的一个数;接着用最小值和下一个数继续比较,如果最小值大于下一个数,则交换他们的值,依次循环比较,一轮比较下来,最小值就会被找到,并且更换到最开始的位置。
- 2.接着找到第二小的值,把他更换到列表中的第二位。
- 3.以此类推,执行n-1轮,就可以完成排序。
参考代码1:
#include <iostream>
using namespace std;
int main() {
int a[5] = {
4,2,1,5,3};
int len = sizeof(a) / sizeof(a[0]);
for(int i = 0; i < len; i++) {
for(int j = i+1; j < len; j++) {
if(a[i] > a[j]) {
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
for (int i = 0; i < len; i++) {
cout << a[i] << " ";
}
}
参考代码2:
#include <iostream>
using namespace std;
int main() {
int a[5] = {
4,2,1,5,3};
int len = sizeof(a) / sizeof(a[0]);
for(int i = 0; i < len-1; i++) {
int min = i;
for(int j = min; j < len-1; j++) {
if(a[min] > a[j+1]) {
int t = a[min];
a[min] = a[j+1];
a[j+1] = t;
}
}
}
for (int i = 0; i < len; i++) {
cout << a[i] << " ";
}
}
8. 顺序查找
思路:
- 1.遍历数组。
- 2.找到跟目标值相等的元素,就输出他的下标。
- 3.遍历结束后,如果没有搜索到目标值,就输出-1。
#include <iostream>
using namespace std;
int main() {
int a[5] = {
4,5,2,3,1};
int target = 9;
int len = sizeof(a)/sizeof(a[0]);
bool b = false;
for(int i = 0; i < len; i++) {
if(target==a[i]) {
cout<<i<<endl;
b = true;
}
}
if(b==false) {
cout<<-1<<endl;
}
}
9. 二分查找
【注意】:二分查找的前提是数组是排序好的。
思路:
- 1.从数组的中间元素开始,如果中间元素正好是目标值,则搜索结束。
- 2.如果目标值大于或者小于中间元素,则在大于或小于中间元素的那一半数组中搜索。
#include <iostream>
using namespace std;
int main() {
int a[5] = {
4,5,8,9,15};
int target = 5;
int len = sizeof(a)/sizeof(a[0]);
int left = 0;
int right = len-1;
bool b = false;
while(left<=right){
int mid = (left+right)/2;
if(a[mid]<target){
left = mid+1;
}else if(a[mid]>target){
right = mid-1;
}else{
cout<<mid;
b = true;
break;
}
}
if(b==false) {
cout<<"找不到该数字";
}
}
10. 输入一个整数n,计算11+22+…+n*n的值并打印
#include<iostream>
using namespace std;
int main(){
int n;
int sum=0;
cin>>n;
for(int i=1;i<=n;i++){
int num=i*i;
sum+=num;
}
cout<<sum<<endl;
}
11. 输入3个数,求最大值
#include <iostream>
using namespace std;
int main() {
int a = 10;
int b = 20;
int c = 30;
int max = a;
if(b>max){
max = b;
}
if(c>max){
max = c;
}
cout<<max;
}
12.方阵
题目:通过键盘输入两个数,一个3,代表方阵行数;一个4,代表方阵列数。打印输出这个方阵。
#include <iostream>
using namespace std;
int main() {
int row,col;
cin>>row>>col;//row:控制行 col:控制列
for(int i = 0; i< row; i++) {
for(int j = 0; j< col; j++) {
cout<<"*";
}
cout<<endl;
}
}
13.直角三角形
#include <iostream>
using namespace std;
int main() {
for(int i = 0; i < 5; i++) {
for(int j = 0; j < i+1; j++) {
cout<<"*";
}
cout<<endl;
}
}
14.输出对应的数字
15.小明有5本新书,要借给A、B、C三位小朋友,如果每人每次只能借1本书,则可以有多少种借法?
#include <iostream>
using namespace std;
int main() {
int a = 0;
for (int i = 1; i <= 5; ++i) {
for (int j = 1; j <= 5; ++j) {
for (int k = 1; k <= 5; ++k) {
if (i != j && j != k && i != k) {
a++;
cout << "A: " << i << " B: " << j << " C: " << k << endl;
}
}
}
}
cout << "Total: " << a << endl;
}
16.一个口袋中放有12个球,已知其中3个是红的,3个是白的,6个是黑的,现从中任取8个,问共有多少种可能的颜色搭配?
#include <iostream>
int main() {
for (int r = 0; r < 4; ++r) {
for (int w = 0; w < 4; ++w) {
for (int b = 0; b < 7; ++b) {
if (r + w + b == 8) {
std::cout << "red: " << r << " white: " << w << " blue: " << b << std::endl;
}
}
}
}
return 0;
}
17.爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最后剩一阶,若每步跨3 阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。请问在1到2000内,有多少个数能满足?
#include <iostream>
int main() {
int num = 0;
for (int i = 1; i < 2000; ++i) {
if (i % 2 == 1 && i % 3 == 2 && i % 5 == 4 && i % 6 == 5 && i % 7 == 0) {
// std::cout << "Number of steps: " << i << std::endl;
num++;
}
}
std::cout<<num;
}
18.编写一个函数,接受一个数组作为参数,返回数组中的中位数。
例如,
- 数组为:{1,2,7,8,9,5},中位数为6。
- 数组为:{1,9,8,3,5},中位数为5。
#include<iostream>
#include <algorithm>
using namespace std;
int fn(int arr[],int len){
sort(arr,arr+len);
if(len % 2 == 0){
return (arr[len / 2 - 1] + arr[len / 2]) / 2;
} else{
return arr[len / 2];
}
}
int main(){
int arr[] = {
1,2,7,8,9,5};
int len = sizeof(arr)/sizeof(arr[0]);
cout<<fn(arr,len)<<endl;
}