Untitled
unknown
plain_text
4 years ago
3.1 kB
7
Indexable
#include <stdio.h> #include <string.h> char S[3005]; char P[3005]; int A[30]={0}; char B[3005][3005]; int C[30]={0}; char D[3005][3005]; int E[3005]={0}; int F[3005]={0}; int hell[3005]={0}; void bubblesort (int n); int N=0,r=0; int main(void){ int s=0,a=0,c=0,m=0,b=0; scanf("%s",S); scanf("%d",&N); scanf("%s",P); s=strlen(S); for(int i=0;i<N;i++){ //去紀錄P中各字母的數量 A[(int)(P[i]-'0')-48]++; } for(int i=0;i<s-N+1;i++){ for(int j=0;j<N;j++){ C[(int)(S[i+j]-'0')-48]++; //找S中每N個數的每個字母出現次數 } for(int j=1;j<27;j++){ if(A[j]!=C[j]){ break; } if(j==26){ for(int k=0;k<N;k++){ B[a][k]=S[i+k]; //各字母數相等的存到B中 } a++; } } for(int j=0;j<30;j++){ C[j]=0; } } for(int i=0;i<a;i++){ //這段是判斷重複的,B中存到D中,重複的就不存 for(int j=0;j<c;j++){ for(int k=0;k<N;k++){ if(D[j][k]==B[i][k]){ F[j]++; } } } for(int j=0;j<c;j++){ if(F[j]==N){ m=1; b=j; } } for(int j=0;j<c;j++){ F[j]=0; } if(m!=1){ for(int w=0;w<N;w++){ D[c][w]=B[i][w]; } E[c]++; c++; } else if(m==1){ E[b]++; } m=0; } bubblesort (c); //排順序 //bubblesortt (c); printf("%d\n",c); for(int i=0;i<c;i++){ printf("%s %d\n",D[i],E[i]);//印出來 } return 0; } void bubblesort (int n) { int i, j,m; char temp; for (i = 0; i < n-1; i++) { for (j = 0; j < n-1-i; j++) { if (E[j] < E[j + 1]) { for(int v=0;v<N;v++){ temp=D[j][v]; D[j][v]=D[j + 1][v]; D[j+1][v] =temp; } m=E[j]; E[j]=E[j+1]; E[j+1]=m; } else if(E[j]==E[j+1]){ for(int k=0;k<N;k++){ if (D[j][k] > D[j + 1][k]) { for(int v=0;v<N;v++){ temp=D[j][v]; D[j][v]=D[j + 1][v]; D[j+1][v] =temp; } m=E[j]; E[j]=E[j+1]; E[j+1]=m; break; } else if(D[j][k]<D[j+1][k]){ break; } } } } } }
Editor is loading...