基础题目(题目来源PTA)
代码如下:
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int n,k;
cin>>n>>k;
int f=n;
int a[1005];
for(int i=0;i<n;++i)
{
cin>>a[i];
}
for(int i=1;i<=k;++i)
{
int max=0;
for(int j=1;j<n;++j)
{
if(a[max] > a[j])
{
int item=0;
item = a[max];
a[max] = a[j];
a[j] = item;
max =j;
}
if(a[max] <= a[j])
{
max = j;
}
}
--n;
}
for(int i=0;i<f-1;++i)
cout<<a[i]<<" ";
cout<<a[f-1]<<endl;
return 0;
}
总结:1.冒泡排序是本题解题关键,只需将冒泡次数改变就行。
代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
char s1[100];
gets(s1);
char s2[100];
gets(s2);//输入字符串,可输入空格
char a[105];//用于储存字符串
char *m; //指向子串首字符
while((m=strstr(s1,s2))!=NULL)//多次处理,直至s2不再为s1的子串
{
strcpy(a,m+strlen(s2));//保存从返回地址开始,去除子串后的余部
*m = '\0'; //保存父串中返回地址前的部分
strcat(s1,a); //将改变的字符串拼接,即得到目标串
}
puts(s1);
return 0;
}
总结:1.该题难点,输入与输出,运用c语言中的gets()和puts(),而c++语言则可以选择使用 string s;getline(cin,s); ( getline() 可以读取空格)
2.本题运用多中头文件string.h中的函数,让解题变得更简便。
string.h头文件中 常见函数 简介
函数 | 功能简述 |
---|---|
strcpy | 复制字符串 |
strlen | 返回字符串长度 |
strcat | 把一个字符串添加到另一字符串后 |
strcmp | 比较两个字符串 |
strchr | 在字符串中查找另一个字符串首字符出现的位置 |
strerror | 解释错误代码 |
strstr | str(str1,str2)判断str2是否是str1的子串,如果是则返回str2在str1中首次出现的地址(指针),否则则返回NULL |
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
string s[105];
for(int i=0;i<n;++i)
{
cin>>s[i];
}
int k=n;
for(int i=1;i<=m;++i)
{
int max=0;
for(int j=1;j<n;++j)
{
if(s[max]>s[j])
{
string item;
item = s[max];
s[max] = s[j];
s[j] = item;
}
max++;
}
--n;
}
for(int i=0;i<k;++i)
{
cout<<s[i]<<endl;
}
return 0;
}
总结:依旧是冒泡排序
代码示例:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
string s;
getline(cin,s);
int n;
cin>>n;
int m=s.size();
n = n%m;
for(int i=n;i<m;++i)
cout<<s[i];
for(int i=0;i<n;++i)
cout<<s[i];
return 0;
}
总结:1.本题需要注意输入方法getline的使用和 取余的运用。
代码如下:
#include <iostream>
using namespace std;
int main()
{
string s;
getline(cin,s);
int length = s.size();
int m=0;
if(s[0]==' ')
{
while(1)
{
++m;
if(s[m]!=' ')
break;
}
}
if(m==length-1)
{
cout<<s[m]<<endl;
return 0;
}
if(m==length)
{
cout<<s[m]<<endl;
return 0;
}
if(length==0)
{
return 0;
}
int x=length-1,y=length-1;
while(1)
{
if(y==x && s[x]==' ')
{
while(1)
{
--x;
--y;
if(s[x]!=' ')
break;
}
}
if(y==x && s[x]!=' ')
{
while(1)
{
if(s[x]!=' ')
x--;
if(s[x]==' ')
break;
if(x==m)
{
for(int i=m;i<=y;++i)
cout<<s[i];
return 0;
}
}
for(int i=x+1;i<=y;++i)
cout<<s[i];
if(x>m)
cout<<" ";
y=x;
}
}
return 0;
}