(11)以特定字符串结尾(以""end"为例)
#include<stdio.h>
#include<string.h>
int main()
{
char s[100];
while(1)
{
gets(s);
if(strcmp(s,"end")==0) break; //比较字符串相等与否推荐用strcmp函数
puts(s);
}
}
(12)判断字串
#include<stdio.h>
int substring(char x[],char y[]);
int main(void)
{
char s[99],sub[99];
gets(s);
gets(sub);
if(substring(s,sub)==-1)
printf("%s子串没有找到!",sub);
else
printf("子串%s在主串%s中第一次出现的位置是%d",sub,s,substring(s,sub));
}
int substring(char x[],char y[])
{
int i,j,k;
for(i=0;x[i]!='\0';i++)
{
for(k=i,j=0; x[k]&&y[j]&&x[k]==y[j] ; k++,j++ )
;
if(y[j]=='\0') return i;
}
return -1;
}
(3)回文串 (设flag=1 i为第一个字符,j为最后一个字符,相向运动,如果发现不同则flag=0,break)
(4)打印杨辉三角
#include<stdio.h>
int main()
{
int a[10][10]={0};
int i,j;
for(i=0;i<10;i++)
a[i][0]=1;
for(i=1;i<10;i++)
for(j=1;j<=i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
printf("%4d",a[i][j]);
printf("\n");
}
return 0;
}
(5)约瑟夫环基础解法
题目示例:n(n<=20)个同学围成一圈,从第一个同学开始从1报数,假如报到第m(m<n)号,则这个同学离开圈子,从下一个同学重新开始报数。输入n和m,请给出离开圈子的同学的号码序列。
void f(char x[],int y[]); //统计字符串不同类型的计数到数组
#include<stdio.h>
int main()
{
int a[20],i,n,m,left,cnt;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
a[i]=i+1;
i=n-1;
left=n;
cnt=0;
while(left)
{
i=(i+1)%n;//下一个位置
if(a[i]==0) continue;//报过了,pass
cnt++;//报号
if(cnt==m)//如果报号到了m
{
printf("%d ",a[i]);
left--;
a[i]=0;
cnt=0;
}
}
printf("\n");
return 0;
}
未完待续