18711 字符串去重
Description
一个完全由小写字母组成的长度为n的字符串,现在要求你去除所有重复的字母,并将剩下的字母按从小到大的次序输出。
如输入baaadccaab,输出abcd。
输入格式
第一行一个整数n,表示字符串长度(0<=n<=100000)。
第二行一个字符串。
输出格式
去除所有重复的字母,并将剩下的字母按ASCII码从小到大的次序输出。
输入样例
10
baaadccaab
输出样例
abcd
#include <stdio.h>
#include <string.h>
int main()
{
int n;
scanf("%d",&n);
char ch[n],ans[26];
//getchar()和gets(s)连用,为了消除前一个输入的回车导致gets(s)无法输入的问题
getchar();
gets(ch);
long len = strlen(ch);
for(int i=0;i<len;i++){
ans[ch[i]-'a']=ch[i];
}
for(int i=0;i<len;i++){
if(ans[i]!='\0')
printf("%c",ans[i]);
}
return 0;
}
18410 最后一张纸片
有N张(N不超过1000)纸片,每张纸片上有一个数字从1至N,最初N张纸片按由大到小顺序叠放(编号最大的在最下面),现在不断重复执行如下操作:
(1)将最上面的一张放到最下面;
(2)再将最上面的一张放到最下面;
(3)将当前最上面的一张拿走;
重复上面操作(1)(2)(3)(1)(2)(3)(1)......
直到剩下最后一张纸片,输出该纸片上的编号
输入格式
一个正整数N
输出格式
剩下的最后一张纸片编号
输入样例
3
输出样例
2
提示:N=3时,每列表示一次操作后的纸片排列情况
1 2 3 1 2 1 2
2 3 1 2 1 2
3 1 2
#include <stdio.h>
#include <string.h>
int main()
{
int n;
scanf("%d",&n);
int arr[n],s=n;
//倒序输入
for(int i=0;i<n;i++){
arr[i]=s;
s--;
}
//每次遍历都将要抽出的那一张放到数组的末尾
//最终剩下的那一张就是数组第一个元素
for(int i=n-1;i>0;i--){
//先把第一个放到最后
for(int j=i;j>0;j--){
int temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}
//再把第二个放到最后(重复上述代码)
for(int j=i;j>0;j--){
int temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}
//将最上面那一张拿走
arr[i]='\0';
}
printf("%d",arr[0]);
return 0;
}
不要bad
Description
由键盘输入一行字符(最多不超过80个字符,以回车结束),要求编程实现删除该行字符中的“bad”(小写),输出处理后的结果(结果不含bad)。
输入格式
一行字符
输出格式
不含“bad”的结果
输入样例
abadnewsisgoodnews,andbadisnotBad
输出样例
anewsisgoodnews,andisnotBad
注意特殊情况例如:ababadde
#include <stdio.h>
#include <string.h>
int main()
{
char ch[81];
gets(ch);
int len=strlen(ch);
for(int i=0;i<len-3;i++){
//将bad位置置为空
if(ch[i]=='b' && ch[i+1]=='a' && ch[i+2]=='d'){
ch[i]='\0';
ch[i+1]='\0';
ch[i+2]='\0';
//将后续元素向前补齐
for(int j=0;i+j+3<len;j++){
ch[i+j]=ch[i+3+j];
ch[i+3+j]='\0';
}
//从头检测
i=-1;
}
}
for(int i=0;i<len;i++){
printf("%c",ch[i]);
}
return 0;
}
分解质因数
读入一个数n,输出1到n所有数分解成质因数之积的形式,格式见参考样式
Such us: n=10;
输出:
1=1
2=2
3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5
一个数除以从2开始的循环,如果==1,结束,!=1,继续循环
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
printf("1=1\n");
for(int i=2;i<=n;i++){
printf("%d=",i);
int k=i;
for(int j=2;j<=n;j++){
int flag=0;
if(k%j==0){
printf("%d",j);
k/=j;
flag=1;
j=1;
}
if(k==1){
break;
}else if(flag==1){
printf("*");
}
}
printf("\n");
}
return 0;
}