程序设计题目及答案3

更新时间:2023-10-19 03:57:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

首字母大写

Time Limit:1000MS Memory Limit:65536K

Total Submit:588 Accepted:427

Description

对一个字符串中的所有单词,如果单词的首字母不是大写字母,则把单词的首字母变成大写字母。在字符串中,单词之间通过空白符分隔,空白符包括:空格(' ')、制表符('\\t')、回车符('\\r')、换行符('\\n')。

Input

输入一行:待处理的字符串(长度小于80)。

Output

输出一行:转换后的字符串。

Sample Input

if so, you already have a google account. you can sign in on the right.

Sample Output

If So, You Already Have A Google Account. You Can Sign In On The Right.

Source

? ? ? ? ? ? ? ? ? ?

#include using namespace std; int main() {

string b; while(cin>>b) {

if(b[0]>='a'&&b[0]<='z') b[0]=b[0]-32; cout<

? ? ?

}

return 0; }

古代密码

Time Limit:1000MS Memory Limit:65536K

Total Submit:427 Accepted:342

Description

古罗马帝王有一个包括各种部门的强大政府组织。其中有一个部门就是保密服务部门。为了保险起见,在省与省之间传递的重要文件中的大写字母是加密的。当时最流行的加密方法是替换和重新排列。 替换方法是将所有出现的字符替换成其它的字符。有些字符会碰巧替换成它自己。例如:替换规则可以是将'A' 到 'Y'替换成它的下一个字符,将'Z'替换成 'A',如果原词是 \则它变成 \。 排列方法改变原来单词中字母的顺序。例如:将顺序 <2, 1, 5, 4, 3, 7, 6, 10, 9, 8> 应用到 \上,则得到\。 人们很快意识到单独应用替换方法或排列方法,加密是很不保险的。但是如果结合这两种方法,在当时就可以得到非常可靠的加密方法。所以,很多重要信息先使用替换方法加密,再将加密的结果用排列的方法加密。用两中方法结合就可以将\加密成\。 考古学家最近在一个石台上发现了一些信息。初看起来它们毫无意义,所以有人设想它们可能是用替换和排列的方法被加密了。人们试着解读了石台上的密码,现在他们想检查解读的是否正确。他们需要一个计算机程序来验证她,你的任务就是写这个验证程序。

Input

输入有两行。第一行是石台上的文字。文字中没有空格,并且只有大写英文字母。第二行是被解读出来的加密前的文字。第二行也是由大写英文字母构成的。 两行字符数目的长度都不超过计划100。

Output

如果第二行经过某种加密方法后可以产生第一行的信息,输出 \,否则输出\。

Sample Input

JWPUDJSTVP

VICTORIOUS

Sample Output

YES

Source

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

#include #include using namespace std; int main() {

int n,m,i,j,k,h,g,f;

int b[10]={2, 1, 5, 4, 3, 7, 6, 10, 9, 8}; char s[100],a[100],c[100];//string s,a,c; while(cin>>s)//getline(cin,s)) { j=0;

for(i=0;i<10;i++) {

n=b[i];

a[j]=s[n-1]; j++; }

h=strlen(a);//h=a.length(); for(i=0;i

if(a[i]>'A'&&a[i]<='Z') a[i]=a[i]-1; if(a[i]=='A') a[i]='Z'; }

/*getline(cin,c),*/cin>>c;k=0;f=strlen(c);//f=c.length(); for(i=0;i

if(k==strlen(s))//s.length()) cout<<\ else

cout<<\}

return 0;

? ?

}

打印数字字符串

Time Limit:1000MS Memory Limit:65536K

Total Submit:500 Accepted:417

Description

use recursion to write a function to do this “123456789987654321”(请大家用数组做)

Input Output

Sample Input

1

Sample Output

123456789987654321

Source

? ? ? ? ? ? ? ? ? ? ?

#include using namespace std; int main() {

int a[10]={1,2,3,4,5,6,7,8,9}; int b,i;

while(cin>>b) {

for(i=0;i<9;i++) cout<

for(i=8;i>=0;i--)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

cout<

return 0; }

#include using namespace std; int main() {

int a[10]={1,2,3,4,5,6,7,8,9}; int b,i;

while(cin>>b) {

for(i=0;i<9;i++) cout<

for(i=8;i>=0;i--) cout<

return 0; }

#include #include using namespace std;

bool cm(char *p,char *q) {

int i,j,h,k; h=strlen(p); k=strlen(q); j=0;

for(i=0;i

if(p[j]==q[i]) j++; }

if(j==h)

return 1; else

return 0; }

int main() {

int n,m,f,g,i,j; while(cin>>n) {

char a[n][50];

? ? ? ? ? ? ? ? ? ? ? ? ? ?

for(i=0;i

cin>>a[i]; } f=1;

for(i=0;i

if(cm(a[i],a[i+1])==1) f++; }

cout<

return 0; }

英雄数字

Time Limit:1000MS Memory Limit:65536K

Total Submit:121 Accepted:94

Description

有n个数字,其中有一个数字的出现次数超过总个数的一半,这个数称之为英雄数。

例如,n=12,整数序列5,5,5,5,5,5,1,2,3,4,5,6,其中的英雄数为5。

对于给定的n个整数组成的序列,请使用数据结构堆栈,设计出一个时间复杂度为O(n)算法,计算出序列中的英雄数。

Input

由键盘提供输入数据。文件的第1行有1个正整数n<=1000000,表示整数序列有n个整数。第2行是整数序列,整数大小都在32位有符号整型内,数字之间以一个空格隔开。

输入数据保证必然存在一个数字,其出现次数超过总个数的一半。

Output

程序运行结束时,将指定序列的英雄数输出到屏幕上。

Sample Input

12

5 5 5 5 5 5 1 2 3 4 5 6

Sample Output

5

Source

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

#include using namespace std;

int cm(const void *p1,const void *p2) {

return *((int *)p2)>*((int *)p1)? -1:1; }

int main() {

int k,i,j,n,max,m,a[1000]; while(cin>>n) {

for(j=0;j

cin>>a[j]; }

qsort(a,n,sizeof(int),cm); m=0;

for(i=0;i

if(a[i]==a[i+1]) {

m++; k=i; } }

if((m+1)>n/2) cout<

return 0; }

最大公约数

Time Limit:1000MS Memory Limit:65536K

Total Submit:709 Accepted:232

Description

给定两个正整数,求它们的最大公约数。

Input

有多组数据,每行为两个正整数,且不超过int可以表示的范围。

Output

行对应输出最大公约数。

Sample Input

4 8 8 6

200 300

Sample Output

4 2 100

Hint

系统的测试文件中数据有很多组,因此同学们在程序里要写循环读取数据并判断是否读完文件的代码。

如果不知道如何处理,可以参考下面的两个模板: C++这样写:

while(cin>>x>>y) {

求x和y最大公约数的代码

}

C这样写:

while(scanf(%x %y\ {

求x和y最大公约数的代码 }

Source

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

#include #include using namespace std; int main() {

int m,n,u,r; while(cin>>n>>m) {

if(m

{ u=m;m=n,n=u; }

while(n!=0) { r=m%n; m=n; n=r; }

cout<

return 0; }

最小公倍数

Time Limit:1000MS Memory Limit:65536K

Total Submit:683 Accepted:286

Description

给定两个正整数,求它们的最小公倍数。

Input

有多组数据,每行为两个正整数,且不超过int可以表示的范围。

Output

每行对应输出最小公倍数。

Sample Input

11 21 25 35 44 54

Sample Output

231 175 1188

Source

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

#include using namespace std; int main() {

int x=0,y=0,z=0,u=0; while(cin>>x>>y) {

if (x

u=x;x=y;y=u; }

if(x==0 || y==0) {cout<<\ else{z=x; while(x%y!=0) {

x=x+z;}} if(x%y==0)

? ? ?

cout<

求分数序列和

Time Limit:1000MS Memory Limit:65536K

Total Submit:389 Accepted:92

Description

有一个分数序列 2/1,3/2,5/3,8/5,13/8,21/13,.... 求这个分数序列的前n项之和。

Input

有多组数据,每行为一个正整数,且小于等于100。

Output

每行对应输出:分数序列的和(浮点数,精确到小数点后4位)。

Sample Input

99

Sample Output

160.4849

Hint

最好在程序中使用双精度浮点数(double)记录求得的和。

Source

? ? ?

#include #include using namespace std;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

int main() {

int i,n=0; while(cin>>n) {

double sum=0.0;

double a[500],b[500]; double s[500]; a[0]=2;b[0]=1; for(i=1;i

a[i]=a[i-1]+b[i-1]; b[i]=a[i-1]; s[i]=a[i]/b[i]; }

for (i=0;i

sum=sum+a[i]/b[i]; }

cout<

return 0; }

公共C练习--选择结构--判断偶数

Time Limit:1000MS Memory Limit:65536K

Total Submit:981 Accepted:631

Description

从键盘输入一个整数,判断其是否为偶数.

Input

输入一个x(在0到100之间)。

Output

如果是偶数输出\否则输出\

Sample Input

2 1

Sample Output

yes no

Source

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

#include using namespace std; int main() {

int n,a,b;

while(cin>>n&&n>0&&n<100) {

if(n%2==0) {

cout<<\ } else

cout<<\ }

return 0; }

#include using namespace std; int main() {

int n,a,b;

while(cin>>n&&n>0&&n<100) {

if(n%2==0) {

cout<<\ } else

cout<<\

}

? return 0; ? }

?

公共C--选择结构--综合

Time Limit:1000MS Memory Limit:65536K

Total Submit:1116 Accepted:359

Description

任意输入3个0到20000之间的整数,求出这3个数中的最大数、奇数的和、偶数的乘积,以及这3个数的平均值。如果没有奇数,对应的输出位置输出0。如果没有偶数对应的输出位置输出1。

Input

输入只有一行,3个0到20000之间的整数

Output

输出只有一行,分别输出3个数中的最大数、奇数的和、偶数的乘积,以及这3个数的平均值(保留2位小数)。每个输出之间用一个空格隔开。

Sample Input

1 2 3 1 1 1 2 2 2

Sample Output

3 4 2 2.00 1 3 1 1.00 2 0 8 2.00

Source

?

#include

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

#include using namespace std; int main() {

int a[3],i,j,f;

while(cin>>a[0]>>a[1]>>a[2]) {

double h=0.0;int n=0,max=0,k=1,g=0; for(i=0;i<3;i++) {

if(a[i]>max) {

max=a[i]; }

if(a[i]%2!=0) {

n=n+a[i];

}if(a[i]%2==0) {

k=k*a[i]; }

g=g+a[i];} h=g*1.0/3;

cout<

\}

return 0; }

#include #include using namespace std; int main() {

int a[3],i,j,f;

while(cin>>a[0]>>a[1]>>a[2]) {

double h=0.0;int n=0,max=0,k=1,g=0; for(i=0;i<3;i++) {

if(a[i]>max) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

max=a[i]; }

if(a[i]%2!=0) {

n=n+a[i];

}if(a[i]%2==0) {

k=k*a[i]; }

g=g+a[i];} h=g*1.0/3;

cout<

\}

return 0; }

公共C测试--选择结构--字符转换

Time Limit:1000MS Memory Limit:65536K

Total Submit:813 Accepted:504

Description

由键盘输入一个字符,若为大写字母,则输出对应的小写字母。若为小写字母,则输出对应的大写字母。若为数字,则输出一个“#”。

Input

输入只有一行,由键盘输入一个字符。

Output

输出只有一行,若为大写字母,则输出对应的小写字母。若为小写字母,则输出对应的大写字母。若为数字,则输出一个“#”。

Sample Input

a b

C d E F 6

Sample Output

A B c D e f #

Source

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

#include using namespace std; int main() {

char a,n,m,i,j; while(cin>>a) {

if(a>='0'&&a<='9') {

cout<<\}

else if(a>='A'&&a<='Z') {

n=a+32;

cout<

else if(a>='a'&&a<='z') {

m=a-32;

cout<

return 0;

}

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

#include using namespace std; int main() {

char a,n,m,i,j; while(cin>>a) {

if(a>='0'&&a<='9') {

cout<<\}

else if(a>='A'&&a<='Z') {

n=a+32;

cout<

else if(a>='a'&&a<='z') {

m=a-32;

cout<

return 0;

}

数据录入

Time Limit:1000MS Memory Limit:65536K

Total Submit:364 Accepted:219

Description

把数据录入一个二维数组中,按要求输出

Input

输入m,n(都大于0,小于50),接下来有m行n列共m*n个数据(每个数据都在int范围内);接着输入一个整数q,q大于0小于等于m.

Output

输出第q行的所有数据。

Sample Input

3 4

1 2 3 4 5 6 7 8 1 2 3 4 2

Sample Output

5 6 7 8

Source

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

#include using namespace std; int main () {

int m,n,i,j,g; while(cin>>m>>n) {

int a[m][n];

for(i=0;i

cin>>a[i][j]; } cin>>g;

for(j=0;j

cout<

return 0; }

#include using namespace std; int main ()

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

{

int m,n,i,j,g; while(cin>>m>>n) {

int a[m][n];

for(i=0;i

cin>>a[i][j]; } cin>>g;

for(j=0;j

cout<

return 0; }

偶数求和

Time Limit:1000MS Memory Limit:65536K

Total Submit:185 Accepted:63

Description

有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。

Input

输入数据有多组,每组占一行,包含两个正整数n和m,n和m的含义如上所述。

Output

对于每组输入数据,输出一个平均值序列,每组输出占一行。

Sample Input

3 2

本文来源:https://www.bwwdw.com/article/g0of.html

Top