我以为我发际线变高了
总分:415
一维数组 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与第一位和最后一位进行循环,这样子也就至关于先进行中间循环再进行第一位与最后一位的变换