数组的定义简单,可简化代码,增长代码可读性,也便于使用循环结构,但它的不足之处就是数组大小必须定义时给出,数组空间的大小一旦肯定后就不能更改,空间太大可能会形成空间浪费,过小数组又会越界,使得代码出错。相比前面的内容,数组仍是比较优秀的,数组可用来储存数据,对于不一样的状况咱们能够选择一维数组,二维数组,字符数组。数字也可存放在字符数组中,但若要计算的话,就要先-‘0’,转成数字。利用数组能够将多个数进行排序,而普通代码则作不到这点。冒泡法、排序法都是数组排序的经典作法。
一维数组:175 二维数组:105 字符数组:130 总分:405
找出不是两个数组共有的元素 给定两个整型数组,本题要求找出不是二者共有的元素。 输入格式: 输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。 输出格式: 在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。
void Found(int a[],int b[],int n,int m); //函数声明 定义 n,m,i,j; 定义数组a a[20]; 定义数组b b[20]; 输入a数组元素个数n 输入数组a 输入数组b元素个数m 输入数组b Found(a,b,n,m); //调用函数 return 0; void Found(int a[],int b[],int n,int m) //函数定义 定义 i,j,k=0,cn; 定义数组c c[41]; //把数组a和数组b中的元素放到c数组中 static int flag[40]; //使用数组flag避免同一数字重复输出 cn=n+m; for i=0 to n-1 do //把a数组中的数放到c数组中 c[i]=a[i]; end for for i=0 to m-1 do //把b数组中的数放到c数组中 c[n+i]=b[i]; end for for i=0 to cn-1 do if flag[i] then continue; end if for j=i+1 to cn-1 do if c[i]==c[j]&&i<n&&j>=n then //两个数分别在a数组和b数组中 flag[j]=1; flag[i]=1; end if if c[i]==c[j]&&i<n&&j<n then //两个数同在a数组中 flag[j]=1; end if if c[i]==c[j]&&i>=n&&j>=n then //两个数同在b数组中 flag[j]=1; end if end for if flag[i]==0 then c[k++]=c[i]; end if end for 输出数组c }
阅览室
天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。书号为不超过1000的正整数。当管理员将0做为书号输入时,表示一天工做结束,你的程序应输出当天的读者借书次数和平均阅读时间。
注意:因为线路偶尔会有故障,可能出现不完整的纪录,即只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪录。另外,题目保证书号是书的惟一标识,同一本书在任什么时候间区间内只可能被一位读者借阅。算法
void LibrarySystem(int a[][3],int k); //函数声明 定义天数n 定义二维数组a a[2000][3]; 定义 i,k,num,hour,minu; char c; //S,E 输入天数n for i=1 to n-1 do k=0; while(1) scanf("%d %c %d:%d",&num,&c,&hour,&minu); if num!=0 then //把借书信息存入a数组中 a[k][0]=num; //数组每行第一个元素存放书号 a[k][1]=c; //第二个元素存放是借书仍是还书 a[k][2]=hour*60+minu; //第三个元素存放时间 k++; //记录一天的借书还书次数 end if else break; end while LibrarySystem(a,k); //函数调用 end for return 0; void LibrarySystem(int a[][3],int k) //函数定义 定义 i,j,count=0; //可根据count的值判断该借书数据是否有效 double sum=0; for(i=0;i<k;i++) //一天的借书还书次数 if a[i][1]=='S' then //借书 for j=i+1 to k-1 do if a[i][0]==a[j][0]&&a[j][1]=='S' then //无效记录 break; end if else if a[i][0]==a[j][0]&&a[j][1]=='E' then //还书 sum=sum+a[j][2]-a[i][2]; //计算借书时间 count++; //计算一天的借书次数 break; end if end for end if end for if count!=0 then //输出有效数据 printf("%d %.0f\n",count,sum/count); else //无效数据 printf("0 0\n"); }
大数加法 输入2个大数,每一个数的最高位数可达1000位,求2数的和。 保证输入数都是数字,不能有空格,输出2数相加的结果
定义 i,j,length1,length2; // length1是字符数组s1的长度, length2是字符数组s2的长度, char s1[1000],s2[1000]; int num1[1000]={0}; // 数字数组num1 int num2[1000]={0}; // 数字数组num2 输入字符串s1,s2 length1=strlen(s1); //求第一个加数的位数 length2=strlen(s2); // 求第二个加数的位数 j=0; for i=length1-1 to 0 do //将字符数组转化为数字数组,并倒数存放,做为第一个加数 num1[j]=s1[i]-'0'; j++; end for j=0; for i=length2-1 to 0 do //将字符数组转化为数字数组,并倒数存放,做为第二个加数 num2[j]=s2[i]-'0'; j++; end for for i=0 to 1000 do //实现大数的加法 num1[i]=num1[i]+num2[i]; if num1[i]>9 then num1[i]=num1[i]-10; num1[i+1]++; end if end for for (i=999;i>=0&&num1[i]==0;i--) //求得最终结果的位数 if(i>0) for(;i>=0;i--) //输出最终答案 printf("%d", num1[i]); end for end if else printf("0"); end for return 0;
同窗的代码
数组
个人代码
函数