大神们帮帮忙,死循环是什么情况

时间:2023-02-03 20:55:21
DNA的形状 
Time Limit:1000MS  Memory Limit:32768K



Description:
grass从小就喜欢生命科学,他总是好奇花草鸟兽从哪里来的。终于, grass上中学了,接触到了神圣的名词--DNA.它有一个双螺旋的结构。 这让一根筋的grass抓破头皮,“要是能画出来就好了” grass喊道。 现在就请你帮助他吧! ^_^


Input:
输入包含多组测试数据。第一个整数N(N<=15),N表示组数,每组 数据包含两个整数a,b。a表示一个单位的DNA串的行数,a为奇数且 3<=a<=39。b表示重复度(1<=b<=20)。 
Output:
输出DNA的形状,每组输出间有一空行。 
Sample Input:
2
3 1
5 4

Sample Output:
X X
 X
X X

X   X
 X X
  X
 X X
X   X
 X X
  X
 X X
X   X
 X X
  X
 X X
X   X
 X X
  X
 X X
X   X

#include<iostream>
#include<string>
using namespace std;
int main()
{
char arr[80][80];
arr[40][40]='X';
int a,b,p,c,i,j,k,d;
for(i=0;i<=80;i++)
{
for(j=0;j<=80;j++)
arr[i][j]=' ';
}
for(i=40,j=40;i<=80,j<=80;i++,j++)
arr[i][j]='X';
for(i=40,j=40;i>=0,j<=80;i--,j++)
arr[i][j]='X';
for(i=40,j=40;i<=80,j>=0;i++,j--)
arr[i][j]='X';
for(i=40,j=40;i>=0,j>=0;i--,j--)
arr[i][j]='X';
p=0;
cin>>a;
while(a--)
{
if(p)
cout<<endl;
p++;
cin>>b>>c;
while(c--)
{
d=b/2;
for(i=40-d;i<=40+d-1;i++)
{
for(j=40-d;j<=40+d;j++)
cout<<arr[i][j];
cout<<endl;
}

}
for(j=40-d;j<=40+d;j++)
cout<<arr[40+d][j];

cout<<endl;

}
return 0;
}

6 个解决方案

#1


程序有死循环?运行了一下可以的呀

#2


为什么我的电脑运行它运行的后面会出现****.exe已停止工作。如果有可用的解决方案,Windows降关闭程序变通知你。前几组证据正常输出,最后一组数据输出后出现上述情况,其他的代码运行都是正常的,只要这串代码是不可以的,就和死循环一模一样

#3


char arr[80][80];
 arr[40][40]='X';
改成
char arr[81][81];
arr[41][41]='X';
就可以了
数组越界啊~~~
数组是从0 -N-1的编号~~~

#4




引用 2 楼 A15957108648 的回复:
为什么我的电脑运行它运行的后面会出现****.exe已停止工作。如果有可用的解决方案,Windows降关闭程序变通知你。前几组证据正常输出,最后一组数据输出后出现上述情况,其他的代码运行都是正常的,只要这串代码是不可以的,就和死循环一模一样


嗯嗯 我运行了下
提示缓冲区溢出
那就是说明 越界之类~~~也就是非法内存操作

分 拿来~~~~

#5


崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。

#6


判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。
#include <time.h>
#include <stdlib.h>
#include <windows.h>
int main() {
    int a,b[11];//本来是b[10],为判断哪句越界,故意声明为b[11]

    srand((unsigned int)time(NULL));//按两次F11,等黄色右箭头指向本行时,调试、新建断点、新建数据断点,地址:&b[10],字节计数:4,确定。
    while (1) {//按F5,会停在下面某句,此时a的值为10,b[10]已经被修改为对应0..4之一。
        b[(a=rand()%11)]=0;
        Sleep(100);
        b[(a=rand()%11)]=1;
        Sleep(100);
        b[(a=rand()%11)]=2;
        Sleep(100);
        b[(a=rand()%11)]=3;
        Sleep(100);
        b[(a=rand()%11)]=4;
        Sleep(100);
    }
    return 0;
}

#1


程序有死循环?运行了一下可以的呀

#2


为什么我的电脑运行它运行的后面会出现****.exe已停止工作。如果有可用的解决方案,Windows降关闭程序变通知你。前几组证据正常输出,最后一组数据输出后出现上述情况,其他的代码运行都是正常的,只要这串代码是不可以的,就和死循环一模一样

#3


char arr[80][80];
 arr[40][40]='X';
改成
char arr[81][81];
arr[41][41]='X';
就可以了
数组越界啊~~~
数组是从0 -N-1的编号~~~

#4




引用 2 楼 A15957108648 的回复:
为什么我的电脑运行它运行的后面会出现****.exe已停止工作。如果有可用的解决方案,Windows降关闭程序变通知你。前几组证据正常输出,最后一组数据输出后出现上述情况,其他的代码运行都是正常的,只要这串代码是不可以的,就和死循环一模一样


嗯嗯 我运行了下
提示缓冲区溢出
那就是说明 越界之类~~~也就是非法内存操作

分 拿来~~~~

#5


崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。

#6


判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。
#include <time.h>
#include <stdlib.h>
#include <windows.h>
int main() {
    int a,b[11];//本来是b[10],为判断哪句越界,故意声明为b[11]

    srand((unsigned int)time(NULL));//按两次F11,等黄色右箭头指向本行时,调试、新建断点、新建数据断点,地址:&b[10],字节计数:4,确定。
    while (1) {//按F5,会停在下面某句,此时a的值为10,b[10]已经被修改为对应0..4之一。
        b[(a=rand()%11)]=0;
        Sleep(100);
        b[(a=rand()%11)]=1;
        Sleep(100);
        b[(a=rand()%11)]=2;
        Sleep(100);
        b[(a=rand()%11)]=3;
        Sleep(100);
        b[(a=rand()%11)]=4;
        Sleep(100);
    }
    return 0;
}