while (scanf("%d", &n), n) {//读入基因长度,遇到n=0时终止输入
char str[maxn + 1];//还有0结束符
int current[maxn], target[maxn];
int i, j;
scanf("%s", str);//读入起始基因串
for (i = 0; i < n; i++) {
current[i] = toDigit(str[i]);
}
scanf("%s", str);//读入目标基因串
for (i = 0; i < n; i++) {
target[i] = toDigit(str[i]);
}
memset(cnt, 0, sizeof(cnt)); //初始化计数数组为0,为计数数组开辟空间,cnt是频数数组
total = 1;
//统计各个整数出现次数
for (i = 0; i < n; ++i) cnt[current[i]]++, total *= (i +1);//n!
for (j = 1, j <= cnt[current[i]]; ++j;) {//j<=cnt[i]即j小于应有频数,++j比j++运行次数少一点,我们要计算数字 i 的排列总数,即 total / j
total /= j;
}
//计算total =n!/(cnt[0]!*cnt[1]!*cnt[2]!*cnt[3]!
}
int currentCode = encode(current[]);//将起始基因编码为一个四进制整数
int targetCode = encode(target[]);//将目标基因编码为一个四进制整数
这是我的代码,如您所见,我在前面定义了current ,后面int currentCode = encode(current[]);这句话我得到了一个未定义变量的错误;但是中间也有应用到这个变量却没有报错,我不明白这是为什么。
encode(current);
, encode(target)
,没有最后的 []
。
最好可以提供完整的错误信息。
问题内容: 我只是阅读了以下问题的答案:从类定义中的列表理解访问类变量 它有助于我理解为什么以下代码会导致: 发生这种情况是因为未在列表理解的特殊范围内定义。但是我不明白为什么下面的代码可以正常工作。 我得到了输出。但是我一直在期待这个错误:因为我一直在期待,就像在上一个示例中一样,名称没有在列表理解的范围内定义,类似地,名称也不会在列表理解的范围内定义。 您能不能帮助我理解为什么列表理解范围内没
问题内容: 我该如何做: 健康)状况? (或某些原因,因为我很确定我刚才写的东西是完全错误的) 我正在尝试检查列表中的a是(空白)还是包含。 问题答案: 您可以将您的字符串与空字符串进行比较: 但是您可以将其缩写为: 说明:An通过为您提供的逻辑表达式计算值来实际起作用:或。如果仅使用变量名(或诸如“ hello”之类的文字字符串)而不是逻辑测试,则规则是:空字符串计为False,所有其他字符串计
问题内容: 我想检查一个变量是否具有多个值之一。我对为什么在这种情况下不起作用感到困惑。我正在按照给出该示例的教程进行操作,但是当我尝试执行此操作时,它只会根据第一个值检查变量。我的支票怎么了? 问题答案: (“Jesse” or “jesse”) 上面的表达式测试是否评估为。如果是这样,则表达式将返回它;否则,它将返回。该表达式等同于编写: 因为是一个非空字符串,所以它将 始终 求值为并因此返回
问题内容: 我已经阅读了有关node.js和其他服务器(例如Apache)的信息,其中线程有所不同。我根本不了解线程的含义。 如果我有一个运行SQL的网页来访问数据库,请在一个服务器端页面中说三个不同的数据库,这对node.js中的线程意味着什么?阿帕奇?“线程”在这里是什么意思? 或者作为我看到的文章,“启动一个新线程来处理每个请求”。 说Apache为每个请求生成一个线程,但node.js却没
问题内容: 有什么最短的方法吗? 如果我是正确的,应该用? 有可能,并且在一行中写(也许是数组?)而不重复? 问题答案: 如果要测试变量是否 确实 是,请使用标识运算符: 如果要检查是否未设置变量: 或者,如果变量不为空,则为空字符串,零,..: 如果要测试变量是否不是空字符串,也将足够: