zoukankan      html  css  js  c++  java
  • C语言博客作业04--数组

    1.本章学习总结

    1.1 思维导图

    1.2 本章学习体会及代码量学习体会

    1.2.1 学习体会

    本章学习了数组,学习了解了几种数组,也学会通过数组来解决问题。刚开始学习一维数组时觉得难度不是很大,但继续学习了二维数组、字符数组后就感受到了难度,完成PTA不知道如何下手,或是运行错误或者答案错误不知如何解决,后面通过询问同学,学习同学的代码来解决问题,也提高了自己。

    1.2.2 代码累计

    2.PTA总分

    2.1截图PTA中三次题目集的排名得分



    2.2 我的总分:

    200+105+150=455

    3.PTA实验作业

    3.1 PTA题目1

    新浪微博中一奇葩贴:“我出生于1988年,直到25岁才遇到4个数字都不相同的年份。”也就是说,直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求,自动填充“我出生于y年,直到x岁才遇到n个数字都不相同的年份”这句话。

    3.1.1 算法分析

    定义函数Num(int year);
    
    主函数
    	定义 年份year,要求n,年龄i;
    	输入出生年份,要求;
    	for i=0 to    do
    		调用函数Num(int year);
    	if Num(year+i)==n  end for
    	输出  年龄i,年份year;
    
    函数Num(int year)
    	定义 个位one,十位ten,百位hundred,千位thousand;
    	定义数组num[10] 并初始化;
    	提取并统计年份的各个位的数字;
    	if num[one]==4||num[ten]==4||num[hundred]==4||num[thousand]==4 then
    		return 1;//满足没有不同数字
    	if num[one]==3||num[ten]==3||num[hundred]==3||num[thousand]==3 then
    		return 2;//满足只有2个不同数字
    	if num[one]==1&&num[ten]==1&&num[hundred]==1&&num[thousand]==1 then
    		return 4;//满足有4个不同数字
    	if num[one]==1||num[ten]==1||num[hundred]==1||num[thousand]==1 then
    		return 3;//满足有3个不同数字
    

    3.1.2 代码截图

    3.1.3 PTA提交列表及说明

    Q1:不清楚不足四位的数字如何补0
    A1:后来通过搜索知道了使用%04d可以解决问题
    Q2:运行时出现答案错误或者运行超时
    A2:通过阅读代码及调试发现只有3个不同数字的条件放在前面时,满足有4个不同数字条件的数字也可以满足只有3个不同数字的条件,将4个不同数字的if条件语句放在前面就可以解决

    3.2 PTA题目2

    一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。本题要求编写程序,求一个给定的n阶方阵的鞍点。

    3.2.1 算法分析

    定义 行列数n,i,j,k,判断flag=0;
    定义 数字数组number[6][6],判断数组flag1[6][6],判断数组flag2[6][6]; 
    输入行列数n;
    通过循环输入数组number[6][6];
    
    for i=0 to n-1 do
    	for k=0 to n-1 do
    			if number[i][k]>number[i][j] then
    			flag1[i][j]=1;//判断并将除该行最小的数字外对应的位置赋值为1 
    		for k=0 to n-1  do   
    			if number[k][j]<number[i][j] then
    			flag2[i][j]=1;//判断并将除该列最大的数字外对应的位置赋值为1
    for i=0 to n-1  do
      	for j=0 to n-1  do
      		if flag1[i][j]==0&&flag2[i][j]==0 then
      			printf("%d %d",i,j);
    			flag=1;//判断是否有满足条件的数字,有则输出下标 
    if flag==0  then
        printf("NONE");//没有则输出 NONE
    

    3.2.2 代码

    3.2.3 PTA提交列表及说明

    Q1:刚开始没有看清题目的意思,简单的认为只是找方阵中最小值及输出时惯性思维认为输出数字
    A1:当提交之后显示答案错误后发现了问题所在

    3.3 PTA题目3

    输入2个大数,每个数的最高位数可达1000位,求2数的和。

    3.3.1 算法分析

    定义 函数Reverse(char a[]);
    
    主函数
    	定义 数组长度len,i=0;
    	定义 字符数组num1[100],字符数组num2[100],数字数组result[1000];
    	if strlen(num1)>strlen(num2)  then
    		len=strlen(num1);
    	else  then 
    	    len=strlen(num2);//取更长数组的长度
    	调用函数 Reverse(num1);
    	调用函数 Reverse(num2);
    	for i=0 to len-1  do
    	{
    		if num1[i]==''  then  
    		    num1[i]='0';
    		if num2[i]==''  then  
    		    num2[i]='0';//当数组中的字符不足部分,转''为0
    		result[i]=result[i]+(num1[i]-'0')+(num2[i]-'0');//进行运算
    		if result[i]>9  then 
    	  		result[i]-=10;
    	  		result[i+1]++;//当数字超过10需进位 
    	}
    	if result[len]!=0  then 
    	    len++;//判断头位是否需要进位 
    	输出结果 
     
    函数Reverse(char a[])//将数组逆序,如123转为321
    	定义 长度len,第一位top=0,最后一位bottom;
    	定义字符 temp;//用于交换 
    	len=strlen(a);//取数组长度 
    	bottom=len-1;
    	while bottom>=top  do
    		temp=a[top];
    	    a[top]=a[bottom];
    	    a[bottom]=temp;
    	    top++;
    	    bottom--;//利用循环将数组头尾交换
    

    3.3.2 代码


    3.3.3 PTA提交列表及说明

    Q1:两个数字位数不一定相同
    A1:运用函数,将两个数字进行逆序,便于运算
    Q2:当运算位数不同时,出现部分部分正确
    A2:因为位数不同,不能进行完整的运算,通过将位数较小的数字不足的部分的''转换成0,使得两个数字位数相同

    4.代码互评

    4.1 代码截图

    • 同学

    • 自己

    4.2 二者的不同

    1.同学的做法是找到每行的最大值,然后直接比较每行的最大值是否为该列的最小值;而我的做法是分别找出每行的最大值和每列的最小值,然后对比两者是否为同一个
    2.同学借助两个变量flag和flag1进行判断,而我是借助两个数组,方法上同学的方法更加的简洁,但我会觉得容易出错

  • 相关阅读:
    【动态规划】51nod1780 完美序列
    【树形dp】bzoj4726: [POI2017]Sabota?
    初涉manacher
    【数位dp】bzoj3131: [Sdoi2013]淘金
    【思维题 kmp 构造】bzoj4974: [Lydsy1708月赛]字符串大师
    web框架
    Bootstrap补充
    jQuery之jQuery扩展和事件
    JQuery之文档操作
    JQuery之属性操作
  • 原文地址:https://www.cnblogs.com/qq1191834402/p/10088768.html
Copyright © 2011-2022 走看看