我觉得我发际线变高了
总分:
一维数组 6-7 使用函数输出指定范围内的Fibonacci数 :
在一大堆数据中找出重复的是一件经常要做的事情。现在,我们要处理许多整数,在这些整数中,可能存在重复的数据。
你要写一个程序来做这件事情,读入数据,检查是否有重复的数据。如果有,输出“YES”这三个字母;如果没有,则输出“NO”。
定义变量n为要输入多少个数,i为循环变量,flag为了控制输出
定义a数组,数组长度很大,用于存放要输入的数据,b数组数组长度为100001,为空数组
输入n
for i=0 to n do
输入 存放于a数组的值
end for
for i=0 to n do
b[a[i]]++
if b[a[i]]>1 then flag++
endif
end for
if flag>0 then 输出 YES
else then 输出NO
end if
Q1:起初第一个函数的写法是正确的,所以才有一分,但是第二个函数不管怎么改正,还是一直输不出正确答案的数字
A1.当要输入的数字很大时候,PTA会跳出运行超时,然后再找一个数组用来放置另一个数组的值,再利用flag的值来判断
Q2.改了第一个的错误,后来本来正确的地方反而错误了
A2.是另外一个数组的问题,后来问了舍友,老师也说了运用空间换时间的方法,然后把两个数组的长度都设置得很大
二维数组 7-6 找鞍点
一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。
本题要求编写程序,求一个给定的n阶方阵的鞍点。
定义变量i,j,k为循环变量,n为设置n阶矩阵,flag为控制变量,max存放最大值,num1为存放行下标,num2为存放列下标
定义a数组n-1行,n-1列
for i=0 to n do
for j=0 to n do
输入 存放于a数组的值
end for
end for
for i=0 to n do
max=a[i][0];
for j=0 to n-1 do
if max<=a[i][j+1] then //遍历行中每一个数字找行中最大的数字
max=a[i][j+1]
num1=i
num2=j+1
end if
for k=0 to n-1 do //遍历列中每一个数字找是否符合条件
if max>a[k][num2] then
flag=0
end if
if flag==1 then
输出 鞍点行下表,列下标
end if
else 输出NONE
Q一开始max的值一直在变,导致num1与num2的值也一直在变,max也不是一行中最大的数,因为我把max放在内循环内
A1.在第二层外循环外定义max为每行第一个数,解决了max的值一直变化的问题
Q2.当有鞍点的时候,并且是并列的时候,要输出最后一个鞍点
A2.利用flag来解决问题,通过flag是否等于1来决定输出哪一个
Q3.段错误一直无法解决,不知道哪里出错了
A3.问了舍友,让他看了代码,他发现了一个小错误,改变一下循环的条件。。。居然过了。。。<=n-1,改为<n-1
字符数组 7-7 判断E-mail地址是否合法
输入一个字符串,判断是否是合法邮箱(格式正确即可,不管是否真的存在)输入的只能是字母、数字、下划线、@以及.五种, @前后只能是字母或者数字,而且.后只能是com, 是则输出YES ,否则输出NO。
定义变量i=0 ,j
定义index系列用来存放下标,flag系列为控制变量 ,num系列为存放各个下标加减以后的新下标
定义字符数组a数组n-1行,n-1列
while a[i]!=‘\0‘ //遍历数组寻找相对应的数组的下标
do
if a[i]==‘.‘ then
index1=i
end if
if a[i]==‘@‘ then
index2=i;
end if
i++
for i=0 to a[i] do //找是否有不合法字符
if a[i]==‘ ‘ then
flag1=0;
break;
end if
else flag1=1
end for
if a[j]>=‘a‘||a[j]<=‘z‘||a[j]>=‘0‘||a[j]<=‘9‘||a[j]>=‘A‘||a[j]<=‘Z‘ then // @前后只能是字母或者数字
flag2=1 end if
j=index2+1; //@的后一位
if a[j]>=‘a‘||a[j]<=‘z‘||a[j]>=‘0‘||a[j]<=‘9‘||a[j]>=‘A‘||a[j]<=‘Z‘ then // @前后只能是字母或者数字
flag4=1 end if
else flag4=0
num1=index1+1 num2=index1+2 num3=index1+3 num4=index1+4 //.后的三位数
if a[num1]==‘c‘&&a[num2]==‘o‘&&a[num3]==‘m‘&&a[num4]==‘\0‘ then //.后只能是com
flag3=1
if flag1==1&&flag2==1&&flag3==1&&flag4==1 then 输出YES //只有4个控制变量都不为0时才符合题意
else 输出NO
***
Q1..com后有多余字符忘记考虑了,还有字符串中有空格,合法地址后有非法字符忘记考虑了
A1.通过在定义好多个flag和num还有index来解决,记住下标来解决他们前几位是否符合题意
Q2..com后有多余字符一直出错
A2.改了上面的问题,其他本来正确的测试点却错了
Q3.看错题目,把@的前后搞错题目意思,给写成了.的前后的条件
A3.通过改变代码,直接再设一个flag4来判断@前后是否都是数字或字母
同学代码截图
我的代码截图
1.他先看要左移的次数是否可以求余,可以的话先求余,在确定最后要移几次
2.建立两个数组,通过第二个数组来实现数组的循环左移
3.控制输出格式时候,是利用循环的次数来控制空格的输出
1.我的代码利用了个变量temp,来将首位与最后一位进行交换
2.通过一个for循环来实现在首位与最后一位之间进行m次循环,然后再将temp与第一位和最后一位进行循环,这样子也就相当于先进行中间循环再进行第一位与最后一位的变换
原文:https://www.cnblogs.com/zwl-/p/10088818.html