一、编程题
1、数字放大
给定一个整数序列以及放大倍数x,将序列中每个整数放大x倍后输出。
时间限制:1000
内存限制:65536
输入
包含三行: 第一行为N,表示整数序列的长度(N ≤ 100); 第二行为N个整数(不超过整型范围),整数之间以一个空格分开; 第三行包含一个整数(不超过整型范围),为指定的整数x。
输出
N个整数,为原序列放大之后的序列,整数之间以一个空格分开。
样例输入
3
1 5 7
2
样例输出
2 10 14
提示
注意答案的数据范围
参考答案:
include <bits/stdc++.h>
using namespace std;
int main()
{
int a[100],n,i,x;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
cin>>x;
for(i=1;i<=n;i++)
cout<<a[i]*x<<" ";
}
2、单词倒排
编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词的顺序倒排并输出,依然以单个空格分隔。
时间限制:10000
内存限制:65536
输入
输入为一个字符串(字符串长度至多为100)。
输出
输出为按要求排序后的字符串。
样例输入
I am a student
样例输出
student a am I
参考答案:
include <bits/stdc++.h>
void flashback(char a[], int j, int p); //倒序函数
int main(void)
{
char a[10000];
int j, i, k, end;
char temp;
gets(a);
end = strlen(a)-1 ;
for (i = 0; i < end+1; i++) //先处理特殊符号
if (!isalpha(a[i])) //非字母将第一个符号替换为’ ’
{
a[i]=’ ’;
j=0; //j用来记录连续特殊带符号的个数
if(i==0) //如果是首字符 删除他
{
for(k=1;k<=end-1;k++)
a[k]=a[k+1];
a[k]=‘\0’;
}
else k=i+1; //k为特殊符号后的下一字符
while (!isalpha(a[i])&&i<(end+1))
{
i++;
j++;
}
j–;
if(i==(end+1) ) //如果特殊字符结尾,截断字符串
a[k-1]=‘\0’;
else {
for(k=1;k<=end-j;k++) //通过搬移数组去除掉连续的特殊字符
a[k] = a[k + j];
a[k] = ‘\0’;
}
end=strlen(a)-1;
}
flashback(a, 0, end); //句子倒序
for (i = 0; i < end; i++)
if (!isspace(a[i]) && i < end) {
j = i++;
while (!isspace(a[i]) && i < end)
i++;
if (i < end) k = –i;
else k = end;
flashback(a, j, k);
}
puts(a);
}
void flashback(char a[], int j, int p)
{
int i;
char temp;
for (i = j; i < p; i++, p–)
{
temp = a[p];
a[p] = a[i];
a[i] = temp;
}
}
3、
- 计算矩阵边缘元素之和
-
输入一个整数矩阵,计算位于矩阵边缘的元素之和。所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。
时间限制:10000
内存限制:65536
输入
第一行分别为矩阵的行数m和列数n(m < 100,n < 100),两者之间以一个空格分开。 接下来输入的m行数据中,每行包含n个整数,整数之间以一个空格分开。
输出
输出对应矩阵的边缘元素和
样例输入
3 3
3 4 1
3 7 1
2 0 1
样例输出
15
参考答案:
include<stdio.h>
include<stdlib.h>
int main()
{
int m,n;//矩阵的长和宽
int sum = 0;
printf(“输入矩阵的长和宽\n”);
scanf(“%d%d”,&m,&n);
int a[m][n];//存储矩阵的值
//为矩阵赋值
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
scanf(“%d”,&a[i][j]);
}
}
//打印矩阵
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
printf(“%d\t”,a[i][j]);
}
printf(“\n”);
}
//计算首尾两行:行的话就是第一行a[0][?],最后一行a[m-1][?] ,然后以列循环求和0-n
for(int i=0;i<n;i++)
{
sum = sum+a[0][i]+a[m-1][i];
}
//计算首尾两列:列的话就是第一列a[?][0],最后一列a[?][n-1],然后以行循环求和1-n-1,注意要去掉第一行和最后以行,不然重计算
for(int j=1;j<m-1;j++)
{
sum = sum+a[j][0]+a[j][n-1];
}
printf(“矩阵边缘元素之和sum=%d\n”,sum);
return 0;
}
4、奇数单增序列
给定一个长度为N(不大于500)的正整数序列,请将其中的所有奇数取出,并按升序输出。
时间限制:1000
内存限制:65536
输入
共2行: 第1行为 N; 第2行为 N 个正整数,其间用空格间隔。
输出
增序输出的奇数序列,数据之间以逗号间隔。数据保证至少有一个奇数。
样例输入
10
1 3 2 6 5 4 9 8 7 10
样例输出
1,3,5,7,9
参考答案:
include<stdio.h>
int main()
{
int n,i,f,t,m,j=0,a[500];
scanf(“%d”,&n);
for(int i=0;i<n;i++)
{
scanf(“%d”,&m);
if(m%2==1) //判断所输入的数据是否为奇数,若为奇数就把数存入到一维数组a[]中;
{
a[j]=m;
j++; //用j来判断数组内的元素个数。
}
}
for(i=0;i<j-1;i++) //使用冒泡排序的方法对一维数组进行排序
{
int q=0;
for(f=0;f<j-i-1;f++)
{
if(a[f]>a[f+1])
{
t=a[f];
a[f]=a[f+1];
a[f+1]=t;
}
}
}
if(j==1) //需要考虑数组内数据只有一个数据时的情况。
printf(“%d”,a[0]);
else //数组内的数据大于一时。
{
for(i=0;i<j-1;i++)
{
printf(“%d,”,a[i]);
}
if(j>=2)
{
printf(“%d”,a[j-1]);
}
}
//在刚开始没有考虑数组数值为一的情况;造成一直显示结果错误!
return 0;
}
5、实数加法
求两个实数相加的和。
题目中输入输出里出现的浮点数都有如下的形式: P1P2…Pi.Q1Q2…Qj。对于整数部分,P1P2…Pi是一个非负整数且当整数部分不为0时,P1不等于0;对于小数部分,Qj不等于0。
时间限制:1000
内存限制:65536
输入
2行,每行是一个加数。每个加数的长度不超过100。
输出
一行,即相应的和。输出保证一定是一个小数部分不为0的实数。
样例输入
0.111111111111111111111111111111
0.111111111111111111111111111111
样例输出
0.222222222222222222222222222222
参考答案:
include<iostream>
include<string>
include<algorithm>
using namespace std;
int main()
{
string a,b;
int j=0;
int m,n;
string ax,ay,bx,by;
cin>>a;
cin>>b;
int x=a.find(“.”);
int y=b.find(“.”);
ax=a.substr(0,x);
ay=a.substr(x+1);
bx=b.substr(0,y);
by=b.substr(y+1);//将整数小数分离开
if(ax.size()>bx.size())
m=ax.size();//找到最大位数
else
m=bx.size();
if(by.size()>ay.size())
n=by.size();
else
n=ay.size();
while(ax.size()!=m)
ax=“0”+ax;//整数部分补0(在前面补)
while(bx.size()!=m)
bx=“0”+bx;
while(ay.size()!=n)
ay+=“0”;//小数补0(在后面补)
while(by.size()!=n)
by+=“0”;
int k=0;
string zheng=““,xiao=””;
for(int i=n-1;i>=0;i–)//注意要倒序
{
xiao+=((k+(ay[i]-‘0’)+(by[i]-‘0’))%10+‘0’);//k起到进位的作用
k=(k+(ay[i]-‘0’)+(by[i]-‘0’))/10;//进几
}
for(int i=m-1;i>=0;i–)
{
zheng+=((k+(ax[i]-‘0’)+(bx[i]-‘0’))%10+‘0’);
k=(k+(ax[i]-‘0’)+(bx[i]-‘0’))/10;
}
if(k!=0)
zheng+=k+‘0’;
int c;
for (c=0;c<xiao.length();c++)
if (xiao[c] != ‘0’)
break;//去掉小数部分0
reverse(zheng.begin(), zheng.end());//将整数部分倒序
cout << zheng << “.”;
for (int i = xiao.length() - 1; i>=c; i–)//也可以用reverse
cout << xiao[i];
cout << endl;
}
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!




