**web
**
数组
思路分析:
B数组中元素B[i]等于A数组中因此元素之积除以A[i],但题目要求不能使用除法。
因此最直观的思路就是以A[i]为界限,左边元素相乘,右边元素相乘,最后获得B数组。svg
代码实现:函数
#include <stdio.h> #define N 5 //定义数组长度 int main(void) { int i,j; int A[N],B[N]; //初始化数组A,B for(i=0;i<N;i++) { B[i]=1; printf("input value:\n"); scanf("%d",&A[i]); } //A[i]左边元素乘积赋值给B[i] for(i=0;i<N;i++) for(j=i-1;j>=0;j--) B[i]*=A[j]; //A[i]右边元素与B[i]相乘并赋值给B[i] for(i=0;i<N;i++) for(j=i+1;j<N;j++) B[i]*=A[j]; //输出B[N] for(i=0;i<N;i++) printf("B[%d]=%d\n",i,B[i]); return 0; }
时间复杂度为O(n^3)测试
思路分析:
从第一个元素起,判断其他每个元素与该元素是否相等;
若第一个元素无重复,则从第三个元素起找与第二个元素重复的元素,以此类推;
每一个元素都只须要与后面的元素做比较spa
代码实现:code
#include <stdio.h> #define N 10 int main() { int i,j; int A[N]; //输入数组元素 for(i=0;i<N;i++) { printf("Input A[%d]:\n",i); scanf("%d",&A[i]); } //找出第一个重复数字 for(i=0;i<N;i++) for(j=i+1;j<N;j++) if(A[i]==A[j]) { printf("%d\n",A[i]); return 0; } printf("There are no duplicate numbers\n ");//没有重复数字 return 0; }
最好状况下时间复杂度为O(1),最坏状况为O(n^2)xml
思路分析:blog
代码实现:
输入的第一行为两个整数r和c:表明将要输入的矩阵的行数和列数。
输入的第二行包括一个整数num:表明要查找的数字。
接下来的r行,每行有c个数,表明题目所给出的m行n列的矩阵(矩阵如题目描述所示,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
输出:
对应每一个测试案例,
输出”Yes”表明在二维数组中找到了数字t。
输出”No”表明在二维数组中没有找到数字t。
样例输入:
3 3
5
1 2 3
4 5 6
7 8 9
样例输出:
Yes排序
法一:
#include <stdio.h> #include <stdlib.h> int num,r,c,i,j;//num要查找的数字;r行;c列 int *array; //查找函数:暴力法,遍历每个元素 int Find(int n) { int i,j; for(i=0;i<r;i++) for(j=0;j<c;j++) if(*(array+i*c+j)==num) return 1; return 0; } int main() { printf("input row and column:\n"); while(scanf("%d%d",&r,&c)!=EOF) { printf("input num:\n"); scanf("%d",&num); array=(int *)malloc(r*c*sizeof(int)); if(array==NULL) { printf("Out of memory!!!\n "); return -1; } printf("input array num:\n"); for(i=0;i<r;i++) for(j=0;j<c;j++) scanf("%d",array+i*c+j); if(Find(num)==1) printf("Yes\n"); else printf("No\n"); free(array); array=NULL; } return 0; }
法二:
在这里插入代码片