SCAU高程进阶题(自用)
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;
}