2021/11/9
1.从键盘输入任一字符串(不含空格),然后输入所要查找的字符。如果该字符存在于字符串中,则输出它在字符串中第一次出现的位置;否则输出no exist。
#include<iostream>
using namespace std;
int main() {
char a[100], b;
int i;
cin >> a;
cin >> b;
for (i = 0; i < strlen(a); i++) {
if (a[i] == b) {
cout << i;
break;
}
}
if (i == strlen(a)) {
cout << "no exist";
}
return 0;
}
2.有一篇作文,一共有3行文字,每行最多有80个字符。要求分别统计出其中英文字母.数字、空格以及其他字符的个数。
#include<iostream>
using namespace std;
int main() {
char a[80], b;
int i,j;
int letters = 0, numbers = 0, spaces = 0, others = 0;
for (i = 1; i <= 3; i++) {
memset(a, 0, 80);
cin.getline(a,80);
for (j = 0; j < strlen(a);j++) {
if ((a[j] >= 'a' && a[j] <= 'z') || (a[j] >= 'A' && a[j] <= 'Z')) {
letters++;
}
else if (a[j] == ' ') {
spaces++;
}
else if (a[j] >= '0' && a[j] <= '9') {
numbers++;
}
else {
others++;
}
}
}
cout << "统计:" << endl;
cout << "英文字母:" << letters << endl;
cout << " 数字:" << numbers << endl;
cout << " 空格:" << spaces << endl;
cout << "其他字符:" << others;
return 0;
}
3.输入n个字符串(允许含空格),将字符串按字典序由小到大输出。
#include<iostream>
#include<string>
using namespace std;
int main() {
string a[80], temp;
int i, j, n;
cout << "参与排序的字符串数量n为:" << endl;
cin >> n;
cin.get();
cout << "依次输入" << n << "个字符串;" << endl;
for (i = 0; i < n; i++) {
getline(cin, a[i]);
}
for (i = 0; i < n; i++) {
for (j = i + 1; j < n; j++) {
if (a[i] > a[j]) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
cout << "顺序排列后的输出:" << endl;
for (i = 0; i < n; i++) {
cout << a[i] << endl;
}
return 0;
}
4.找出一个二维数组中的“鞍点”。即该位置上的元素在该行上最大,在该列上最小。
#include<iostream>
using namespace std;
int main() {
const int n = 5;
int a[n][n];
int max, min;
int x = 0, y = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j<n; j++) {
cin >> a[i][j];
}
}
for (int i = 0; i < n; i++) {
max = 0;
for (int j = 0; j < n; j++) {
if (a[i][j] > max) {
max = a[i][j];
x = j;
}
}
min = a[0][x];
for (int j = 0; j < n; j++) {
if (a[j][x] < min) {
min = a[j][x];
y = j;
}
}
if (max == min) {
cout << "二维数组中的鞍点为第"<<y+1<<"行第"<<x+1<<"列的" << max << endl;
break;
}
else {
cout << "二维数组中的鞍点不存在" << endl;
break;
}
}
return 0;
}
5.构造一个有序数组。终端读入的一个数x,使用“折半”法(二分法)在数组中找到该数,并输出该数在数组中的位置(输出“xxx是数组中的第_个数”)。若该数不在数组中,则输出“查无此数”。
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
const int n = 5;
int a[n+1];
int x = 0, flag = 0, num = 0;
int left, right,middle;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
sort(a, a + n + 1);
cin >> x;
left = 1;
right = n;
while (left <= right) {
middle = (left + right) / 2;
if (a[middle] == x) {
flag = 1;
left = right + 1;
}
else if (a[middle] < x) {
left = middle + 1;
}
else if (a[middle] > x) {
right = middle - 1;
}
}
if (flag) {
cout << x << "是数组中的第" << middle << "个数";
}
else {
cout << "查无此数";
}
return 0;
}
6.用埃拉托斯特尼筛选取法求出1~200之间的所有素数。
#include<iostream>
using namespace std;
int main() {
int a[201];
cout << "1~200之间的素数为:" << endl;
for (int i = 2; i <= 200; i++) {
a[i] = 1;
}
for (int i = 2; i <= 14; i++) {
if (a[i]) {
for (int j = i*i; j <= 200; j=j+i) {
a[j] = 0;
}
}
}
for (int i = 2; i <= 200; i++) {
if (a[i]) {
cout << i << " ";
}
}
return 0;
}
7.从键盘输入一个英文句子,统计句子中的单词数量。单词之间以一个或多个空格作为间隔。假定句子中的字符数量小于100,请编程实现该功能。
输入:一个英文句子。
输出:文中的单词数量。
#include<iostream>
#include<string>
using namespace std;
int main() {
string a;
int words = 0;
int flag = 1;
getline(cin,a);
for (int i = 0; i < a.length(); i++) {
if ((a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z')) {
if (flag) {
words = words + 1;
}
flag = 0;
}
else {
flag = 1;
}
}
cout << "含有" << words << "个单词。";
return 0;
}
8.编写程序,输入字符串(包含多个’*'),删除除前导和尾部之外的所有’*’后输出。
#include<iostream>
#include<string>
using namespace std;
int main() {
string a,b,c;
int x,y;
getline(cin, a);
for (int i = 0; i < a.length(); i++) {
if (a[i] != '*') {
b = a.substr(0, i + 1);
x = i;
break;
}
}
for (int i = a.length()-1; i > 0 ; i--) {
if (a[i] != '*') {
c = a.substr(i);
y = i;
break;
}
}
for (int i = x + 1; i < y; i++) {
if (a[i] != '*'){
b=b+a[i];
}
}
b = b + c;
cout << b;
return 0;
}
9.排队打水问题。
有N个人排队到R个水龙头去打水(N<=100,R<=10),他们装满水桶的时间分别为T1,T2..Tn为整数且各不相等。应如何安排他们打水的顺序,才能使他们所有人花费的总时间最少。即:输出每人所花时间总和――包括打水时间和等待时间。
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int N, R;
int a[100], b[10] = {};
int time = 0;
cin >> N >> R;
for (int i = 0; i < N; i++){
cin >> a[i];
}
sort(a, a + N);
for (int i = 0; i < N; i++){
sort(b, b + R);
time=time+b[0]+a[i];
b[0]=b[0]+a[i];
}
cout << time << endl;
}
实验体会:
- 注意不同函数所需要的头文件
- 注意flag的使用
- 数组一定要初始化
- 数组大小可用常变量定义