题目1

【问题描述】

给定n个同学的身高(均为100到200之间的正整数),求超过平均身高的同学人数。

【输入形式】

包括两行数据。
第一行包含一个整数n。
第二行包含n个用空格隔开的正整数。

【输出形式】

一行,这一行只包含一个整数,表示超过平均身高的同学人数。

【样例输入】

6
160 155 170 175 172 164

【样例输出】

3

【代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<iostream>
#include<iomanip>
using namespace std;

int main(){
int n,s,c;
float av=0;
c=s=0;
cin>>n;
int a[n];
for(int i=0; i<n; i++)
{
cin >> a[i];
}

for(int i=0;i<n;i++)
{
s=s+a[i];
}

av=(s/n);

for(int i=0;i<n;i++){
if(a[i]>av){
c++;
}
}
cout<<c<<endl;
}

题目2

【问题描述】

让用户输入若干个字符串(包含空格和tab字符),设每个字符串不超过80个字符并以回车换行结束。程序将各字符串按实际长度由小到大排序后输出。

【样例输入】

4
How old are you
Hello
What’s this
Good by

【样例输出】

Hello
Good by
What’s this
How old are you

【样例说明】

程序运行时用户输入的4表示将输入4个字符串。后面各行表示用户输入的4个字符串

【代码1】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include<iostream>
#include<cstring>
using namespace std;

int main(){
int a[100];
char* num[100];
int temp = 0;
char strTemp[100];
int n, size;
cin >> n;
cin.get();
for (int i = 0; i < n; i++)
{
cin.getline(strTemp, 80);
size = strlen(strTemp);
num[i] = new char[size + 1];
strcpy(num[i], strTemp);
}
for (int loop = 0; loop < n; loop++)
{
a[loop] = strlen(num[loop]);

}
for (int loop = 0; loop <= n - 1; loop++)
{
for (int i = loop + 1; i < n; i++)
{
if (a[loop] > a[i])
{
temp = a[i];
a[i] = a[loop];
a[loop] = temp;
}
}
}
for (int i = 0; i < n; i++)
{
for (int loop = 0; loop < n; loop++)
{
if (a[i] == strlen(num[loop]))
{
cout << num[loop];
cout << endl;
}
}
}
for (int i = 0; i < n; i++)
delete num[i];

}

【代码2】

当然,使用此方法两个或多个字符串长度相同时,会重复输出。
所以可以优化此方案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char *num[100];//定义一个字符串数组指针,它可以指向100个字符串数组。
char strTemp[100];
int n, size;
cin >> n;
cin.get();
for (int i = 0; i < n; i++)
{
cin.getline(strTemp, 80);
size = strlen(strTemp);
num[i] = new char[size + 1];//一个字符串指针在堆区申请该指针指向字符串数组大小的空间。
strcpy(num[i], strTemp);//将strTemp数组复制到指针指向的数组中。
}
char *Temp;
int smallest=0;
for (int j = 0; j < n; j++)
{
smallest = j;
for (int loop = j+1; loop < n; loop++)//选择排序法。
{
if (strlen(num[j])>strlen(num[loop]))//比较字符串数组
smallest = loop;//记下最短的字符串的位置,并将位置传递给smallest。
}
if (smallest != j)//避免重复运算smallest等于j的情况,提高运行效率。
{
Temp = num[j];
num[j] = num[smallest];
num[smallest] = Temp;//最短字符串数组和第一个字符串数组交换位置。
}
}
for (int i = 0; i < n; i++)
cout << num[i] << endl;

for (int i = 0; i < n; i++)
delete num[i];
}

题目3

【问题描述】程序先让用户输入一个源字符串(设长度不超过200),再输入一个目标子字符串(设长度不超过80),两字符串都以回车结束。编写查找目标子字符串函数,若存在返回子字符串的起始位置下标,否则返回 - 1。主函数输出查找结果。

【输入形式】

How old are ? (用户输入的源字符串)
older (用户输入的目标子字符串)

【输出形式】

Not exist! (程序输出的查找结果)

【输入形式】

how old are you ?
you

【输出形式】

Exist!

【样例输入】

how old are you ?
old Are

【样例输出】

Not exist!

【代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s1,s2;
int m,n;
getline(cin,s1);
getline(cin,s2);
m=s1.length();
n=s2.length();
for(int i=0;i<=m-n;i++)
{
int h=0;
if(s1[i]==s2[0])
{
for(int j=1;j<=n-1;j++)
{
if(s1[i+j]!=s2[j])h++;
}
if(h==0)
{
cout<<"Exist!";
return 0;
}
h=0;
}
}
cout<<"Not exist!";
return 0;
}

题目4

【问题描述】

输入整数N,输出相应方阵。

【输入形式】

一个整数N。( 1 <= n <= 15 )

【输出形式】

一个方阵,每个数字的场宽为4。

【样例输入】

5

【样例输出】

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

【代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
#include<iomanip>
using namespace std;

int main(){
int n;
cin>>n;
for(int i=1;i<n*n+1;i++){
cout<<setw(4)<<i;
if(i%n==0){
cout<<endl;
}
}
}

题目5

【问题描述】

输入整数N,输出相应方阵。

【输入形式】

一个整数N。( 1 <= n <= 15 )

【输出形式】

一个方阵,每个数字的场宽为4。

【样例输入】

5

【样例输出】

5 4 3 2 1
10 9 8 7 6
15 14 13 12 11
20 19 18 17 16
25 24 23 22 21

【代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int N;
cin>>N;
int a[N][N];
for(int i=0;i<N;i++)
{
for(int j=N*(i+1);j>N*i;j--)
{
cout<<setw(4)<<j;
if(j%N==1)cout<<endl;
}
}
return 0;
}

题目6

【问题描述】

输入整数N,输出相应方阵。

【输入形式】

一个整数N。( 1 <= n <= 15 )

【输出形式】

一个方阵,每个数字的场宽为4。

【样例输入】

5

【样例输出】

1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24
5 10 15 20 25

【代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int N;
cin>>N;
int a[N][N];
for(int i=0;i<N;i++)
{
for(int j=i+1;j<=i+1+N*(N-1);j+=N)
cout<<setw(4)<<j;
cout<<endl;
}
return 0;
}

代码可能略有不足,请大佬多多指教