目录
1006 换个格式输出整数
让我们用字母 B
来表示“百”、字母 S
表示“十”,用 12...n
来表示不为零的个位数字 n
(<10),换个格式来输出任一个不超过 3 位的正整数。例如 234
应该被输出为 BBSSS1234
,因为它有 2 个“百”、3 个“十”、以及个位的 4。
输入格式:
每个测试输入包含 1 个测试用例,给出正整数 n(<1000)。
输出格式:
每个测试用例的输出占一行,用规定的格式输出 n。
输入样例 1:
234
输出样例 1:
BBSSS1234
输入样例 2:
23
输出样例 2:
SS123
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin>>s;
int l=s.length();
int w;
int x;
int y;
if(l==3){
w=s[0]-'0';
while(w--){
cout<<'B';
}
x=s[1]-'0';
while(x--){
cout<<'S';
}
y=s[2]-'0';
int k=1;
while(y--){
cout<<k;
k++;
}
}
else if(l==2){
x=s[0]-'0';
while(x--){
cout<<'S';
}
y=s[1]-'0';
int k=1;
while(y--){
cout<<k;
k++;
}
}else{
y=s[0]-'0';
int k=1;
while(y--){
cout<<k;
k++;
}
}
return 0;
}
1007 素数对猜想
让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(<105),请计算不超过N
的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N
。
输出格式:
在一行中输出不超过N
的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
代码:
#include<bits/stdc++.h>
using namespace std;
int judge(int m){
vector<int> a;//可变数组 动态存放素数
a.push_back(2);
a.push_back(3);
int k=1;
int r=0;
for(int j=4;j<=m;j++){
int w=a.size();
int flag=1;
for(int i=0;i<w;i++){//只判断素数是否可以整除该数
if((j%a[i])==0){
flag=0;
break;
}
}
if(flag){//判断完所有的已知素数
a.push_back(j);
if((j-a[w-1])==2){
r++;
}
}
}
return r;
}
int main(){
int n;
cin>>n;
cout<<judge(n);
return 0;
}
1008 数组元素循环右移问题
一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A0A1⋯AN−M−1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
输入格式:
每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。
输出格式:
在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。
输入样例:
6 2
1 2 3 4 5 6
输出样例:
5 6 1 2 3 4
思路:
题目中说明了不允许使用另外数组,所以想到可以在一开始存放各个数字到数组中时候就可以对各个数字进行事先定位为循环左移位之后的对应位置。观察即可发现位置和n、m的规律。这道题遇到一个坑点是m>n的情况,m要变成m%n。
代码:
#include<iostream>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int a[101];
if(m>n){
m=m%n;
}
int t=n-m;
for(int i=m;t>0;i++){
cin>>a[i];
t--;
}
for(int j=0;j<m;j++){
cin>>a[j];
}
int flag=1;
for(int i=0;i<n;i++){
if(flag){
cout<<a[i];
flag=0;
}else{
cout<<" "<<a[i];
}
}
return 0;
}
参考坑点:1008 数组元素循环右移问题 (测试点1、2)_littlewang_的博客-优快云博客
1009 说反话
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
stack<string> st;
while(cin>>s){
st.push(s);
}
int flag=1;
while(!st.empty()){
if(flag){
cout<<st.top();
flag=0;
}else{
cout<<" "<<st.top();
}
st.pop();
}
return 0;
}
1010 一元多项式求导
设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nxn−1。)
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0
。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b;
int flag1=1;
int flag2=1;
while(cin>>a){
cin>>b;
int c=a*b;
int d=b-1;
if(c!=0){
flag2=0;
if(b!=0){
if(flag1){
cout<<c<<" "<<d;
flag1=0;
}else{
cout<<" "<<c<<" "<<d;
}
}
}
}
if(flag2==1){
cout<<0<<" "<<0;
}
return 0;
}