看见了一道二维数组找数的题,已排好序的数组(从左至右从上到下,都是由小变大的)让找数,瞬间就出思路了,并没有必要去看他的解释,两次二分就搞定了。
#include<cstdio> #include<iostream> using namespace std; void sreach(int num[][100], int row, int line, int goal) { int i=0,j=row-1,mid; while((j-i)>1) { mid=(i+j)/2; if(num[mid][0]>goal) j=mid; else i=mid; } int a,b; a = goal>=num[j][0] ? j : i; i=0,j=line-1; while((j-i)>1) { mid=(i+j)/2; if(num[a][mid]>goal) j=mid; else i=mid; }
if(num[a][b]!=goal){
cout<<"not found!"<<endl;
}
else cout<<a<<","<<b<<endl;
} int main() { int n,m; int number[100][100]; while(scanf("%d%d",&m,&n)) { for(int i=0;i<n;i++) for(int j=0;j<m;j++) scanf("%d",&number[i][j]); int x; cin>>x; sreach(number, n, m, x); } return 0; } /* 6 6 1 2 3 4 5 6 10 12 15 16 18 21 22 23 26 27 29 30 32 33 34 35 36 37 40 41 43 44 47 50 50 51 55 56 57 58 5 5 1 2 3 4 5 10 12 15 16 18 22 23 26 27 29 32 33 34 35 36 40 41 43 44 47 */
还有一道插入字符串,把空格都换成%D%,直接链表搞定,不让用链表就用JAVA的linkedlist写。一个函数就够了。
#include<cstdio> #include<iostream> using namespace std; struct node { char data; node *next; }*root; // 指针没有盘空 void setuplist(char s[]) { node *temp,*n; n=root; int i=0; while(s[i]!='