|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
#include<string.h>
#define MAX 1024
int main()
{
int i=0,j=0,k=0,y=0,c=1,sum=1;
char a[MAX];
fgets(a,MAX,stdin);
for(i=0;i<MAX;i++)
if(a[i+1]=='\0')
break;
for(j=0;j<i;j++)
{
c=1;
for(y=j;y<i-1;y++)
{
if((a[y]-a[y+1])&&a[0]!=a[y]) //这一行的判断条件,乱写的
c++;
sum=sum+c;
}
}
printf("%d",sum);
return 0;
}
//说说我的想法,我是这样的比如输入ababc,先这样比较,ab,aba,abab,ababc,然后从b开始ba,bab.......一直到最后,哪个c++就是出现不同字符的时候加一。大佬们看看,哪个判断条件该如何写
本帖最后由 jackz007 于 2020-12-12 12:32 编辑
- #include <stdio.h>
- int f(const char s[] , const int m)
- {
- int d[26] = {0} , i , r ;
- for(i = 0 ; i < m ; i ++) d[s[i] - 'a'] ++ ;
- for(r = 0 , i = 0 ; i < 26 ; i ++) if(d[i]) r ++ ;
- return r ;
- }
- int main(void)
- {
- char c , s[256] ;
- int i , j , m , sum ;
- for(m = 0 ; (c = getchar()) && c >= 'a' && c <= 'z' ; s[m ++] = c , s[m] = '\0') ;
- for(sum = i = 0 ; i < m ; i ++) for(j = i ; j < m ; j ++) sum += f(& s[i] , j - i + 1) ;
- printf("%d\n" , sum) ;
- }
复制代码
编译、运行实况
- D:\00.Excise\C>cl x.c
- 用于 x86 的 Microsoft (R) C/C++ 优化编译器 19.28.29334 版
- 版权所有(C) Microsoft Corporation。保留所有权利。
- x.c
- Microsoft (R) Incremental Linker Version 14.28.29334.0
- Copyright (C) Microsoft Corporation. All rights reserved.
- /out:x.exe
- x.obj
- D:\00.Excise\C>x
- ababc
- 28
- D:\00.Excise\C>
复制代码
|
-
|