目录
问题 A: 31.简单计算器
内存限制:128 MB时间限制:1.000 S
评测方式:文本比较命题人:外部导入
提交:1414解决:703
题目描述
一个最简单的计算器支持+,-,*,/ 四种运算。输入只有一行:两个参加运算的数一个操作符(+,-,*,/)。输出运算表达式的结果。考虑下面两种情况:
(1)如果出现除数为0的情况,则输出Divided by zero!
(2)如果出现 无效的操作符(即不为+,-,*,/之一),则输出:Invalid operator!
输入
输入只有一行,两个单精度float浮点数a,b和操作符op
输出
用printf的%g格式化输出计算得到的结果
样例输入 复制
34 56 +
样例输出 复制
90
提示
用%g格式化输出,例如printf("%g\n",a+b);
#include<bits/stdc++.h>
using namespace std;
int main()
{
float a,b;
char op;
cin>>a>>b>>op;
if(op=='+')
printf("%g\n",a+b);
else if(op=='-')
printf("%g\n",a-b);
else if(op=='*')
printf("%g\n",a*b);
else if(op=='/')
{
if(b==0)
cout<<"Divided by zero!";
else
printf("%g\n",a/b);
}
else
{
cout<<"Invalid operator!";
}
}
问题 B: 案例 2-1.1:简单计算器
内存限制:128 MB时间限制:1.000 S
评测方式:文本比较命题人:admin
提交:187解决:343
题目描述
模拟简单计算器的工作,假设计算器只能进行加减乘除运算,运算数和结果都是整数,4种运算符的优先级相同,按从左到右的顺序计算。
输入
输入说明,输入一个四则运算算式,(没有空格,且至少有一个操作数),遇到等号“=”说明输入结束。
输出
输出说明,输出计算式的运算结果,如果除法分母为0或有非法运算符,则输出ERROR。
样例输入 复制
1+2*10-10/2=
样例输出 复制
10
提示
此题4种运算符的优先级相同
#include<bits/stdc++.h>
using namespace std;
int main()
{
int ans=0;
cin>>ans;
while(1)
{
char op;
int temp;
cin>>op;
if(op=='=')
{
cout<<ans;
break;
}
else if(op=='/')
{
cin>>temp;
if(temp==0)
{
cout<<"ERROR";
break;
}
else
{
ans/=temp;
}
}
else if(op=='+')
{
cin>>temp;
ans+=temp;
}
else if(op=='-')
{
cin>>temp;
ans-=temp;
}
else if(op=='*')
{
cin>>temp;
ans*=temp;
}
else
{
cout<<"ERROR";
break;
}
}
}
问题 C: 基础实验2-1.2:数组元素的循环左移
内存限制:128 MB时间限制:1.000 S
评测方式:文本比较命题人:admin
提交:391解决:381
题目描述
一个数组A中有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移动M(M>=0)个位置,即将A中的数据由(A0A1...AN-1)变换为(AM...AN-1A0A1...AM-1)(最前面的M个数据)循环移至最后面的M个位置)。
输入
第一行输入N(1<=N<=100),M(M>=0);
第二行输入N个整数
输出
输出循环左移M位以后的整数序列
样例输入 复制
8 3
1 2 3 4 5 6 7 8
样例输出 复制
4 5 6 7 8 1 2 3
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[105];
int n;
cin>>n;
int m;
cin>>m;
m=m%n;
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=m;i<n;i++)
cout<<a[i]<<" ";
for(int i=0;i<m;i++)
cout<<a[i]<<" ";
}
问题 D: 案例2-1.4:递归求简单交错幂级数的部分和
内存限制:128 MB时间限制:1.000 S
评测方式:文本比较命题人:admin
提交:186解决:379
题目描述
构造一个计算简单交错幂级数的部分和的函数:f(x,n)=x-x^2+x^3-x^4+......(-1)^(n-1)x^n。
输入
输入为两个数x,n.其中n为正整数,x为实数且在双精度范围内。
输出
输出为该函数f(x,n)的返回值,保留两位小数,该返回值在双精度范围内
样例输入 复制
0.5 12
样例输出 复制
0.33
提示
使用递归函数
#include<bits/stdc++.h>
using namespace std;
double myfun(double x,int n)
{
double ans;
if(n==1)
return x;
else
{
ans=pow(-1,n-1)*pow(x,n)+myfun(x,n-1);
return ans;
}
}
int main()
{
double x;
int n;
cin>>x>>n;
cout<<fixed<<setprecision(2)<<myfun(x,n);
}
问题 E: 案例2-1.3:数列求和
内存限制:128 MB时间限制:1.000 S
评测方式:文本比较命题人:admin
提交:285解决:324
题目描述
给定某数字A(1=<A<=9)以及非负整数N(0=<N<=100000),求数列之和S=A+AA+AAA+...+AA..A(N个A)。例如A=1,N=3时S=1+11+111=123.
输入
输入数字A(1<=A<=9)与非负整数N。
输出
输出N项数列之和S的值
样例输入 复制
1 3
样例输出 复制
123
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,n;
cin>>a>>n;
stack<int>ans;
int mod=0;
int temp=0;
if(n==0)
cout<<0;
else{
while(n>0)
{
temp=(n*a+mod)%10;
mod=(n*a+mod)/10;
ans.push(temp);
n--;
}
if(mod!=0)
ans.push(mod);
while(!ans.empty())
{
cout<<ans.top();
ans.pop();
}}
}
问题 F: 基础实验2-2.1:整数的分类处理
内存限制:128 MB时间限制:1.000 S
评测方式:文本比较命题人:admin
提交:154解决:317
题目描述
给定N个正整数,要求从中得到下列三种计算结果:
1.A1=能被三整除的最大整数
2.A2=存在整数K使之可以表示为3K+1的整数个数
3.A3=存在整数K使之可以表示为3K+2的所有整数的平均值(精确到小数点后一位)
输入
第一行输入N,随后一行输入N个正整数,所有数字不超过100
输出
一行按顺序输出A1,A2,A3的值,如果某个数字不存在则输出NONE
样例输入 复制
8
5 8 7 6 9 1 3 10
样例输出 复制
9 3 6.5
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[105];
int n;
cin>>n;
int ans1=-1;
int ans2=0;
int ans3=0;
double all=0;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
for(int i=0;i<n;i++)
{
if(a[i]%3==0)
{
ans1=a[i];
//break;
}
if(a[i]%3==1)
ans2++;
if(a[i]%3==2)
{
all+=a[i];
ans3++;
}
}
if(ans1>0)
cout<<ans1<<" ";
else
{
cout<<"NONE"<<" ";
}
if(ans2)
cout<<ans2<<" ";
else
cout<<"NONE"<<" ";
if(ans3)
cout<<fixed<<setprecision(1)<<all/ans3;
else
cout<<"NONE";
}
问题 G: 基础实验2-2.2:求集合数据的均方差
内存限制:128 MB时间限制:1.000 S
评测方式:文本比较命题人:admin
提交:345解决:397
题目描述
设计函数求N个给定整数的均方差
输入
第一行给定整数N,随后一行给定N个整数,所有数字不超过1000
输出
输出均方差,要求固定精度输出小数点后五位
样例输入 复制
10
6 3 7 1 4 8 2 9 11 5
样例输出 复制
3.03974
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[1005];
int n;
cin>>n;
double all=0;
double ans=0;
for(int i=0;i<n;i++)
{
cin>>a[i];
all+=a[i];
}
double aver=all/n;
for(int i=0;i<n;i++)
{
ans+=pow(a[i]-aver,2);
}
cout<<fixed<<setprecision(5)<<sqrt(ans/n);
}
问题 H: 最大连续子序列和问题
内存限制:128 MB时间限制:1.000 S
评测方式:文本比较命题人:liuyong
提交:3366解决:1132
题目描述
给定整数序列A1,A2,....,An,对其所有连续子序列求和,寻找累加和最大的序列。如果所有的整数都是负的,那么最大连续子序列的和为0。
输入
输入包括多组测试数据,每组测试数据一行,每行第一个为正整数n(0 < n <= 100000),表示序列长度,紧跟着n个整数,Ai (-1001<Ai < 1001),表示序列每个元素,各个整数之间用空格隔开。
输出
针对每组测试数据,输出最大连续子序列的和,以及该最大连续子序列的起止位置。当最大连续子序列的长度为0时,序列的起止位置都输出为-1。如果有多个连续子序列的值为最大值,输出第一个连续子序列。
多组输出用换行隔开
样例输入 复制
6 -2 11 -4 13 -5 2
1 -1
样例输出 复制
20 1 3
0 -1 -1
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[100005];
int main()
{
ll n;
while(cin>>n){
for(ll i=0;i<n;i++)
cin>>a[i];
ll temp=0;
ll ans=0;
ll end=0;
int flag=1;
for(ll i=0;i<n;i++)
{
if(a[i]>0)
flag=0;
}
if(flag){
cout<<"0 -1 -1"<<endl;
continue;}
for(ll i=0;i<n;i++)
{
if(temp>0)
temp+=a[i];
else
{
temp=a[i];
}
if(temp>ans)
{
ans=temp;
end=i;
}
}
ll sum=0;
ll start;
for(ll i=end;;i--)
{
sum+=a[i];
if(sum==ans)
{
start=i;
break;
}
}
cout<<ans<<" "<<start<<" "<<end<<endl;
}
}
问题 I: 复数求和(附加代码模式)
内存限制:128 MB时间限制:1.000 S
评测方式:文本比较命题人:liuyong
提交:893解决:642
题目描述
从键盘读入n个复数(实部和虚部都为整数),求出n个复数的和并输出。
本题是附加代码模式,主函数main的代码会自动附加在同学们提交的代码后面,请同学们在提交的时候注释掉自己的main函数。
输入
第一行为正整数n(小于100),接下来n行数据,每行为两个整数,表示一个复数的实部和虚部
输出
输出n个复数的加和结果
样例输入 复制
3
3 4
5 2
1 3
样例输出 复制
9+9i
提示
结构体定义以及函数声明如下图所示:
#include<bits/stdc++.h>
using namespace std;
struct Complex{
int r;
int i;
};
Complex Add(Complex c1,Complex c2){
// Complex ans;
c1.r+=c2.r;
c1.i+=c2.i;
return c1;
}
问题 J: 复数乘积(附加代码模式)
内存限制:128 MB时间限制:1.000 S
评测方式:文本比较命题人:liuyong
提交:345解决:422
题目描述
数集拓展到实数范围内,仍有些运算无法进行。比如判别式小于0的一元二次方程仍无解,因此将数集再次扩充,达到复数范围。
定义:形如z=a+bi的数称为复数(complex number),其中规定i为虚数单位,且i^2=i*i=-1(a,b是任意实数)
我们将复数z=a+bi中的实数a称为复数z的实部(real part)记作Rez=a
实数b称为复数z的虚部(imaginary part)记作 Imz=b.
已知:当b=0时,z=a,这时复数成为实数;
当a=0且b≠0时 ,z=bi,我们就将其称为纯虚数。
定义: 对于复数z=a+bi,称复数z'=a-bi为z的共轭复数。
定义:将复数的实部与虚部的平方和的正的平方根的值称为该复数的模,记作∣z∣
规定复数的乘法按照以下的法则进行:
设z1=a+bi,z2=c+di(a、b、c、d∈R)是任意两个复数,那么它们的积(a+bi)(c+di)=(ac-bd)+(bc+ad)i.
其实就是把两个复数相乘,类似两个多项式相乘,在所得的结果中把i2换成-1,并且把实部与虚部分别合并.两个复数的积仍然是一个复数.
本题是附加代码模式,主函数main的代码会自动附加在同学们提交的代码后面,请同学们在提交的时候注释掉自己的main函数。
输入
两个复数分两行,每行两个数,代表复数的实部和虚部。
输出
两个复数的乘积。
样例输入 复制
1 1
1 1
样例输出 复制
0 2
提示
结构体定义和函数声明见下图
#include<bits/stdc++.h>
using namespace std;
struct Complex{
int r;
int i;
};
Complex Add(Complex c1,Complex c2){
// Complex ans;
c1.r+=c2.r;
c1.i+=c2.i;
return c1;
}
Complex Mul(Complex c1,Complex c2){
Complex ans;
ans.r=c1.r*c2.r-c1.i*c2.i;
ans.i=c1.i*c2.r+c1.r*c2.i;
return ans;
}