用c语言代码实现随机生成一个一万个字符的字符串s1的数据文件Character.txt。发出k(k=100)个随机数整数[0,9999]下标,给这k个字符随机赋值,形成第二个一万个字符的字符串s2。求这两个字符串的LCS,并计算重复率=Length(LCS)/Length(s1)。
时间: 2024-02-05 17:11:47 浏览: 58
随机产生字符串函数 c语言
4星 · 用户满意度95%
以下是用C语言实现该问题的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define N 10000 // 字符串长度
char s1[N + 1], s2[N + 1];
int k;
void generate_string(char *s) {
for (int i = 0; i < N; i++) {
s[i] = rand() % 26 + 'a'; // 生成随机小写字母
}
s[N] = '\0';
}
void generate_s2() {
for (int i = 0; i < k; i++) {
s2[rand() % N] = rand() % 26 + 'a'; // 随机赋值
}
}
int lcs() {
int dp[N + 1][N + 1];
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
if (s1[i - 1] == s2[j - 1]) {
dp[i][j] = dp[i - 1][j - 1] + 1;
} else {
dp[i][j] = dp[i - 1][j] > dp[i][j - 1] ? dp[i - 1][j] : dp[i][j - 1];
}
}
}
return dp[N][N];
}
int main() {
srand(time(NULL)); // 设置随机数种子为当前时间
generate_string(s1);
printf("s1: %s\n", s1);
FILE *fp;
fp = fopen("Character.txt", "w");
fprintf(fp, "%s", s1);
fclose(fp);
int repeat;
printf("Please input k: ");
scanf("%d", &k);
generate_s2();
printf("s2: %s\n", s2);
repeat = lcs();
printf("LCS: %d\n", repeat);
printf("Repeatability: %.2lf%%\n", (double) repeat / N * 100);
return 0;
}
```
程序先生成一个长度为10000的随机字符串s1,并将其写入名为Character.txt的文件中。然后用户输入k,程序随机给s2的k个字符赋值,并计算s1和s2的最长公共子序列LCS,最后输出LCS和重复率。
注意:该程序在Windows系统下需要使用Visual Studio等IDE或者MinGW等工具进行编译运行,Linux系统下应该可以直接使用gcc进行编译。
阅读全文