1006 换个格式输出整数 (15分)
让我们用字母 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 <iostream>
using namespace std;
const int N = 3;
int save[N]={0};
int main()
{
int num, i=0, j=1;
cin>>num;
while(num){
save[i++]=num%10;
num/=10;
}
for(i=0;i<save[2];i++)
cout<<"B";
for(i=0;i<save[1];i++)
cout<<"S";
for(i=0;i<save[0];i++)
cout<<j++;
return 0;
}
1007 素数对猜想 (20分)
让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(<105),请计算不超过N
的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N
。
输出格式:
在一行中输出不超过N
的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
#include <iostream>
using namespace std;
bool isprime(int n){
int i;
for(i=2;i*i<=n;i++)
{
if(n%i==0) return false;
}
return true;
}
int num[100000];
int main()
{
int n, j=0, count=0;
cin>>n;
for(int i=2;i<=n;i++)
{
if(isprime(i)) num[j++]=i;
}
int n1=j;
for(int i=1;i<n1;i++)
{
if(num[i]-num[i-1]==2) {
count++;
}
}
cout<<count;
return 0;
}
1008 数组元素循环右移问题 (20分)
一个数组AAA中存有NNN(>0>0>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移MMM(≥0\ge 0≥0)个位置,即将AAA中的数据由(A0A1⋯AN−1A_0 A_1 \cdots A_{N-1}A0A1⋯AN−1)变换为(AN−M⋯AN−1A0A1⋯AN−M−1A_{N-M} \cdots A_{N-1} A_0 A_1 \cdots A_{N-M-1}AN−M⋯AN−1A0A1⋯AN−M−1)(最后MMM个数循环移至最前面的MMM个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
输入格式:
每个输入包含一个测试用例,第1行输入NNN(1≤N≤1001\le N \le 1001≤N≤100)和MMM(≥0\ge 0≥0);第2行输入NNN个整数,之间用空格分隔。
输出格式:
在一行中输出循环右移MMM位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。
输入样例:
6 2
1 2 3 4 5 6
输出样例:
5 6 1 2 3 4
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a[100], n, m;
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
m = m%n;
reverse(a, a+n);
reverse(a, a+m);
reverse(a+m, a+n);
cout<<a[0];
for(int i=1;i<n;i++)
{
cout<<" "<<a[i];
}
return 0;
}
1009 说反话 (20分)
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char str[81];
cin.getline(str,81);
int len = strlen(str), wordLen=0, isfirst=1;
//输入保证句子末尾没有多余的空格
for(int i=len-1;i>=0;i--)
{
if(wordLen && str[i]==' ') {
if (isfirst) {
isfirst=0;
} else {
cout<<" ";
}
//char temp[81];
for(int j=i+1;j<=i+wordLen;j++)
{
cout<<str[j];
}
//temp[k]='\0';
wordLen = 0;
}
if(str[i]!=' ') wordLen++;
}
//句子首部可能没有空格,所以,需要以下处理
if (wordLen) {
if (isfirst) {
isfirst=0;
} else {
cout<<" ";
}
//char temp[81];
for(int j=0;j<wordLen;j++)
{
cout<<str[j];
}
}
return 0;
}
1010 一元多项式求导 (25分)
设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nxn−1。)
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0
。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
感想:看了好久,发现题目的描述貌似不是很清楚...详情解题还得见代码。
#include <iostream>
using namespace std;
int main()
{
int x,n, flag=1;
while(cin>>x>>n) {
if(n!=0) {
if (flag) {
flag = 0;
cout<<x*n<<" "<<n-1;
} else {
cout<<" ";
cout<<x*n<<" "<<n-1;
}
}
}
if(flag) cout<<0<<" "<<0;
return 0;
}