对于n = 2k(n even),显示核心关闭的所有括号。
in:4
out: (()), ()()
为什么我的程序在运行时会显示“exe已停止工作”?我是否对循环做错了或者我对此问题的处理方法是错误的吗?
#include<stdio.h>
int v[10],n;
void readfile()
{
FILE*fin;
fin=fopen("in.txt", "rt");
if(fin==NULL)
printf("Error");
else{
fscanf(fin, "%d", n);
}
fclose(fin);
}
void writefile()
{
int j;
FILE*fout;
fout=fopen("out.txt", "wt");
if(fout==NULL)
printf("Error");
else{
readfile();
for(j=1; j<=n; j++)
if(v[j]==1)
fprintf(fout, "%c", 41);
else
fprintf(fout, "%c", 40);
}
fclose(fout);
}
int condition(int k)
{
int close=0, open=0, i;
readfile();
for(i=1; i<=k; i++)
if(v[i]==0)
open++;
else
close++;
return open<=n/2 && close <= open;
}
void backtracking(int k)
{
int i;
readfile();
for(i=0; i<=1; i++)
{
v[k]=i;
if(condition(k))
if(k==n)
writefile();
else
backtracking(k+1);
}
}
void main()
{
backtracking(1);
}
答案 0 :(得分:1)
我已经尝试过您的代码,这一行是一个问题:
fscanf(fin, "%d", n);
你应该改用:
fscanf(fin, "%d", &n);
因为当你使用fscanf()
函数时,你需要传递指针而不是变量。
答案 1 :(得分:0)
尝试调试您的程序。
在
中加一个断点fin=fopen("in.txt", "rt");
并检查文件是否正确打开。
如果fin为NULL,则程序将崩溃,因为fclose将无法使用null fin。
(您发布的代码未编译,因为未定义deschise
)
答案 2 :(得分:0)
fout=fopen("out.txt", "wt");
每次都会删除内容
所以应该是fout=fopen("out.txt", "at");
并删除main中的文件。
int main(void)
{
remove("out.txt");
backtracking(1);
return 0;
}