开往:算法
1117. 【入门】绝对素数 [ 提交记录 ]
结果评判: 文本对比
正确/提交: 7 / 12
官方标签: 函数
入门
题目描述
如果一个两位数是素数,且它的数字位置经过对换后仍为素数,则称为绝对素数,例如13,试编程求出所有两位数中的绝对素数。
输入描述
无
输出描述
若干行,每行一个绝对素数,从小到大输出
#include<iostream>
using namespace std;
int main(){
int a[]{11,13,17,31,37,71,73,79,97};
for(int i=0;i<9;i++){
cout<<a[i]<<"\n";
}
}
1393. 询问学号 [ 提交记录 ]
结果评判: 文本对比
正确/提交: 30 / 80
官方标签: 模拟
入门
题目描述
有 n(n≤2×106)
名同学陆陆续续进入教室。我们知道每名同学的学号(在 1
到 109
之间),按进教室的顺序给出。上课了,老师想知道第 i
个进入教室的同学的学号是什么(最先进入教室的同学 i=1
),询问次数不超过 105
次。
输入描述
第一行 2
个整数 n
和 m
,表示学生个数和询问次数。
第二行 n
个整数,表示按顺序进入教室的学号。
第三行 m
个整数,表示询问第几个进入教室的同学。
输出描述
输出 m
个整数表示答案,用换行隔开。
输入输出样例
×💡 样例只是举一个例子,并非全部测试数据,请保证您的程序能满足任意符合题意的数据!
输入
复制
10 3
1 9 2 60 8 17 11 4 5 14
1 5 9
输出
复制
1
8
5
#include<iostream>
using namespace std;
int a[2000001];
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int x;
for(int i=1;i<=m;i++){
cin>>x;
cout<<a[x]<<endl;
}
return 0;
}
1077. 幂的末尾 [ 提交记录 ]
结果评判: 文本对比
正确/提交: 11 / 14
官方标签: 循环结构
入门
题目描述
幂ab的末3位数是多少?
输入描述
两个正整数a,b。1≤a≤100,1≤b≤10000。
输出描述
从高位到低位输出幂的末三位数字,中间无分隔符。若幂本身不足三位,在前面补零。
输入输出样例
×💡 样例只是举一个例子,并非全部测试数据,请保证您的程序能满足任意符合题意的数据!
输入
复制
7 2011
输出
复制
743
#include<iostream>
#include<string>
using namespace std;
int a[1007]={1};
int b[1000]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int main(){
int m,n;
cin>>m>>n;
for(int i=1;i<=n;i++){
for(int j=0;j<=1000;j++){
a[j]*=m;
//需要单独处理进位,把进位调到这里有问题
//进位在下面:2^4=16;进位在这:2^4=26
}
for(int j=0;j<=1000;j++){
//进位
a[j+1]=a[j+1]+a[j]/10;
a[j]%=10;
}
}
int ptr=0;//指针,标记输出位置
for(int i=1000;i>=0;i--){//倒序找出,倒序输出,列表:4 0 2 1,输出:1024
if(a[i]>0){
ptr=1;//找到了(不是0的时候,也能用a[i]!=0)
}
if(ptr==1){//如果找到,倒序输出
cout<<a[2]<<a[1]<<a[0];
return 0;
}
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int p(int n){
for(int i=2;i<n;i++){
if(n%i==0){
return 0;
}
}
return 1;
}
int y(int n){
int sum=0;
for(int i=1;i<n;i++){
if(n%i==0){
sum+=i;
//cout<<"yin"<<i<<endl;;
}
}
return sum;
}
int main(){
int n,sum=0;;
cin>>n;
for(int i=1;i<=n;i++){
if(!p(i)&&sum+y(i)<=n){
//cout<<i<<' '<<y(i)<<endl;
sum+=y(i);
}
}
cout<<sum;
return 0;
}
2187. 字符串中的空格移位 [ 提交记录 ]
结果评判: 文本对比
正确/提交: 2 / 2
官方标签: 字符串
普及/提高-
题目描述
输入一个字符串,将其中的所有空格都移到最前面,然后输出。
输入描述
一个字符串。如:a□b□c(为了能看清空格,□代表一个空格,但实际测试数据中不用□表示空格)
输出描述
空格全部移到了串前的字符串。如:□□abc
输入输出样例
×💡 样例只是举一个例子,并非全部测试数据,请保证您的程序能满足任意符合题意的数据!
输入
复制
a b c
输出
复制
abc
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
getline(cin,s);//cout<<s.size()<<s;;
int ksum=0;
for(int i=0;i<s.size()-1;i++){
if(s[i]==' '){
ksum++;
}
}
for(int i=0;i<ksum;i++){
cout<< ' ';
}
for(int i=0;i<s.size();i++){
if(s[i]!=' '){
cout<<s[i];
}
}
return 0;
}
m^n计算(次方)
#include<iostream>
#include<string>
using namespace std;
int a[1007]={1};
int main(){
int n,m;
cin>>m>>n;
if(m==0){
cout<<0;
return 0;
}
for(int i=1;i<=n;i++){
for(int j=0;j<=1000;j++){
a[j]*=m;
//需要单独处理进位,把进位调到这里有问题
//进位在下面:2^4=16;进位在这:2^4=26
}
for(int j=0;j<=1000;j++){
//进位
a[j+1]=a[j+1]+a[j]/10;
a[j]%=10;
}
}
int ptr=0;//指针,标记输出位置
for(int i=1000;i>=0;i--){//倒序找出,倒序输出,列表:4 0 2 1,输出:1024
if(a[i]>0){
ptr=1;//找到了(不是0的时候,也能用a[i]!=0)
}
if(ptr==1){//如果找到,倒序输出
cout<<a[i];
}
}
return 0;
}
1. 字符串编辑
结果评判: 文本对比
正确/提交: 8 / 86
官方标签: NOIP1996
普及+/提高
题目描述
从键盘输入一个字符串(长度<=40个字符),并以字符 '.'结束。
例如:'This is a book.' 现对该字符串进行编辑,编辑功能有:
D:删除一个字符,命令的方式为:
D a 其中a为被删除的字符
例如:D s 表示删除字符 's' ,若字符串中有多个 's',则删除第一次出现的。
如上例中删除的结果为: 'Thi is a book.'
I:插入一个字符,命令的格式为:
I a1 a2 其中a1表示插入到指定字符前面,a2表示将要插入的字符。
例如:I s d 表示在指定字符 's' 的前面插入字符 'd' ,若原串中有多个 's' ,则插入在最后一个字符的前面。
如上例中:
原串:'This is a book.'
插入后:'This ids a book.'
R:替换一个字符,命令格式为:
R a1 a2 其中a1为被替换的字符,a2为替换的字符,若在原串中有多个a1则应全部替换。
例如: 原串: 'This is a book.'
输入命令:R o e
替换后的字符串为:'This is a beek.'
在编辑过程中,若出现被改的字符不存在时,则给出提示信息"Not exist"。
输入描述
每个测试文件只包含一组测试数据,每组输入数据包含两行:
第一行,输入一个字符串,表示原串;
第二行,输入一个字符串,表示命令。
输出描述
对于每组输入数据,输出编辑后的字符串,如果被改的字符不存在,则输出"Not exist"(引号不输出)。
输入输出样例
×💡 样例只是举一个例子,并非全部测试数据,请保证您的程序能满足任意符合题意的数据!
输入1
This is a book.
D s
输出1
Thi is a book.
输入2
This is a book.
I s d
输出2
This ids a book.
输入3
This is a book.
R o e
输出3
This is a beek.
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
char a,b,c;
getline(cin,s,'.');
cin>>a;
s+='.';
if(a=='D'){
int p=0;
cin>>b;
for(int i=0;i<s.size();i++){
if(s[i]==b){
p=i;
break;
}
}
//cout<<p;
for(int i=0;i<s.size();i++){
if(s[i]!=b||i!=p){
//cout<<i;
cout<<s[i];
}
}
//cout<<'.';
for(int i=0;i<1;i++){
}
}
else if(a=='I'){
int p=0;
cin>>b>>c;
for(int i=s.size()-1;i>-1;i--){
if(s[i]==b){
p=i;
break;
}
}
for(int i=0;i<p;i++){
cout<<s[i];
}
cout<<c;
for(int i=p;i<s.size();i++){
cout<<s[i];
}
//cout<<'.';
}
else{
string s2=s;
cin>>b>>c;
for(int i=0;i<s.size();i++){
if(s[i]==b){
s[i]=c;
}
}
if(s==s2){
cout<<"Not exist";
}
else{
cout<<s;//<<'.';
}
}
return 0;
}//无自动缩进,纯手打,缩进可能有错
#include<iostream>
using namespace std;
main()
{
int s123[1001];
bool a[101]={0};
int n,m,i123,f=0,t=0,s=0,k,cnt=0;;
int i=0;
cin>>n>>k>>m;
t=k-1;
do
{
++t;//逐个枚举圈中的所有位置
if(t>n)
t=1;//数组模拟环状,最后一个与第一个相连
if(!a[t])
s++;//第t个位置上有人则报数
if(s==m)//当前报的数是m
{
s=0;//计数器清零
s123[i]=t;
//cout<<t<<' ';//输出被杀人编号
a[t]=1;//此处人已死,设置为空
f++;//死亡人数+1
}
i123++;
}while(f!=n);//直到所有人都被杀死为止
cout<<s123[0];
}
2234. 除以13 [ 提交记录 ]
结果评判: 文本对比
正确/提交: 3 / 3
官方标签: 高精度计算
普及/提高-
题目描述
输入一个大于0的大整数N,长度不超过100位,要求输出其除以13得到的商和余数。
输入描述
一个大于0的大整数,长度不超过100位。
输出描述
两行,分别为整数除法得到的商和余数。
输入输出样例
×💡 样例只是举一个例子,并非全部测试数据,请保证您的程序能满足任意符合题意的数据!
输入
复制
2132104848488485
输出
复制
164008065268345
0
#include<bits/stdc++.h>
using namespace std;
int divide(int *a,int b,int *c,int *r,int len){
int lenc=len-1;
*r=0;
while(lenc>=0){
int d=(*r)*10+a[lenc];
c[lenc]=d/b;
*r=d%b;
lenc--;
}
for(lenc=len-1;lenc>=0;lenc--){
if(c[lenc]!=0)break;
}
return ++lenc;
}
int main(){
int defsum=0;
const int N=100010;
int a[N],b,c[N],r;
string def;
int defi=0;
memset(a,0,sizeof(a));memset(c,0,sizeof(c));
string opa;
cin>>opa;
b=13;
int lena=opa.size();;
for(int i=lena-1;i>=0;i--)a[lena-i-1]=opa[i]-'0';
int lenc=divide(a,b,c,&r,lena);
for(int i=lenc-1;i>=0;i--){
cout<<c[i];
def+=c[i]+'0';
//defi++;
}
cout<<endl;
string s=def;
int n=13;
for(int i=0;i<lena;i++)a[i]=0;
int x=0;
int b1[1005];
int len=s.size();
for(int i=0;i<len;i++){
a[i]=s[len-1-i]-'0';
}
for(int i=0;i<len;i++){
a[i]=(a[i]*n)+x;
x=a[i]/10;
a[i]%=10;
if(i==len-1&&x>0){
len++;
}
}
// int l=lena+lenb;
// while(c[l-1]==0&&l>1){
// l--;
// }
string str2;
for(int i=len-1;i>=0;i--){
//cout<<a[i];
str2+=a[i]+'0';
}
for(int i=0;i<lena;i++){
a[i]=0;
}
for(int i=0;i<lenc;i++){
c[i]=0;
}
string s1=opa,s2=str2;
int lena1=s1.size();
for(int i=0;i<lena1;i++){
a[i]=s1[lena-i-1]-'0';
}
int lenb1=s2.size();
for(int i=0;i<lenb1;i++){
b1[i]=s2[lenb1-i-1]-'0';
}
int len1=max(lena1,lenb1);
for(int i=0;i<len1;i++){
c[i]+=a[i]-b1[i];
if(c[i]<0){
c[i+1]--;
c[i]+=10;
}
}
while(c[len1-1]==0&&len1>1){
len1--;
}
for(int i=len1-1;i>=0;i--){
cout<<c[i];
}
return 0;
}