C++编程题(答案)

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;
}
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值