【openjudge 计算概论(A)】[函数与字符串练习(1)]

本文提供了五个使用C++编程语言解决实际问题的例子,包括单词替换、字符串排序、带通配符的字符串匹配、二分法求方程根以及自上而下的模块化程序设计。这些示例涵盖了基本的数据结构操作、算法实现以及程序组织方式。
摘要由CSDN通过智能技术生成

1:单词替换

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s[110],s1[110],s2[110];
int len,l1,l2;
int main()
{
	//freopen("int.txt","w",stdout);
	int i,j;
	gets(s+1); gets(s1+1); gets(s2+1);
	len=strlen(s+1); l1=strlen(s1+1);
	s[++len]=' ';
	i=1;
	while(i<=len)
	 {
	 	int last=i;
	 	while(s[i]!=' ') ++i;
	 	if(l1==i-last) 
	 	 {
	 	 	bool p=1;
	 	 	for(j=1;j<=l1;++j)
	 	 	 if(s1[j]!=s[last+j-1]) {p=0; break;}
	 	 	if(p) printf("%s ",s2+1);
	 	 	 else for(j=last;j<=i;++j) printf("%c",s[j]);
		  }
	 	 else for(j=last;j<=i;++j) printf("%c",s[j]);
		++i; 
	 }
	return 0;
}

2:字符串排序

#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
string s[110];
int n,T;
int main()
{
	int i;
	scanf("%d",&T);
	while(T--)
	 {
	 	scanf("%d\n",&n);
	 	for(i=1;i<=n;++i) getline(cin,s[i]);
	 	sort(s+1,s+n+1);
	 	for(i=1;i<=n;++i) cout<<s[i]<<endl;
	 	printf("\n");
	 }
	return 0;
}

3:带通配符的字符串匹配

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s[30],s1[30];
int len,l2;
int main()
{
	int i,j;
	gets(s); 
	gets(s1);
	len=strlen(s); l2=strlen(s1);
	i=0; j=0;
	while(i<len&&j<l2)
	 {
	 	while(i<len&&j<l2&&s[i]!='*'&&s[i]!='?') 
	 	 if(s[i]!=s1[j]) {printf("not matched\n"); return 0; }
	 	  else i++,j++;
	 	while(s[i]=='?'&&i<len&&j<l2) i++,j++;
	 	while((s[i]=='*'||s[i]=='?')&&i<len&&j<l2) 
	 	 if(s[i]=='*') ++i;
	 	  else ++j,++i;
	 	while(s1[j]!=s[i]&&j<l2) ++j;
	 	if(i==len&&j==l2) {printf("matched\n"); return 0;}
	 	if(i==len&&j<l2) {printf("not matched\n"); return 0; }
	 	if(j==l2&&i<len)
	 	 {
	 	 	while(s[i]=='*') ++i;
	 	 	if(i==len) printf("matched\n");
	 	 	 else printf("not matched\n");
	 	 	return 0;
		  }
	 }
	if(i==len&&j>l2) printf("matched\n");
	 else printf("not matched\n");
	return 0;
}

4:用二分法求方程的根

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
double ans,eps;
inline double f(double x)
{
	return (2*x*x*x-4*x*x+3*x-6);
}
inline void qsort(double l,double r)
{
	double mid;
	while(r-l>eps)
	 {
	 	mid=(l+r)/2;
	 	if(f(l)*f(mid)<=0) r=mid;
	 	 else l=mid;
	 }
	mid=(l+r)/2;
	printf("%.8lf\n",mid);
}
int main()
{
	scanf("%lf",&eps);
	if(eps==0) {printf("2.00000000\n"); return 0;}
	qsort(-10.0,10.0);
	return 0;
}

5:请开发一个自上而下的模块化程序,用于完成以下任务

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m;
int a[510],b[510];
inline void read()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;++i) scanf("%d",&a[i]);
	for(int i=1;i<=m;++i) scanf("%d",&b[i]);
}
inline void write()
{
	for(int i=1;i<=n;++i) printf("%d ",a[i]);
	for(int i=1;i<=m;++i) printf("%d ",b[i]);
}
int main()
{
	read();
	sort(a+1,a+n+1);
	sort(b+1,b+m+1);
	write();
	return 0;
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值