1223 - C语言8.27
用函数分别实现下列的功能:
(1) 输入10个职工的姓名和职工号;
(2) 按照职工号由小到大的顺序排序,注意需要随之调整姓名顺序;
(3) 输入一个职工号,用折半查找法找出该职工的姓名,要求通过主函数输入要查找的职工号,同时从主函数输出该职工的姓名。
Input
共有11行。
前10行中的每一行包含了一个职工的姓名和职工号。姓名是一个不包含空格且长度不超过20的字符串,职工号是一个不小于0且不大于1000的整数。
最后一行包含一个职工号,表示需要查找姓名的职工。保证需要查找的职工号一定出现在已经输入的10个职工信息中。
Output
共有11行。
前10行每一行输出按照职工号从小到大排序后的职工信息,包括姓名和职工号,用一个空格隔开。
最后一行输出查找到的职工姓名。
请注意行尾输出换行。
Examples
Input
Zhao 10 Qian 23 Sun 9 Li 0 Zhou 88 Wu 43 Zheng 20 Wang 19 Jiang 26 Dai 79 20
Output
Li 0 Sun 9 Zhao 10 Wang 19 Zheng 20 Qian 23 Jiang 26 Wu 43 Dai 79 Zhou 88 Zheng
Solution C
#include <stdio.h> #include <string.h> int main() { char xm[20][20]; void maopao(char xm[20][20],int bh[]); int zheban(int bh[],int l,int n); int bh[20]; int i,n,l,m; for (i=0;i<10;i++) { scanf("%s",&xm[i]); l=strlen(xm[i]); xm[i][l]='\0'; scanf("%d",&bh[i]); } scanf("%d",&n); maopao(xm,bh); m=zheban(bh,10,n); printf("%s\n",xm[m]); return 0; } void maopao(char xm[20][20],int bh[]) { int i,j,flag,t; char str[20]; for (i=0;i<9;i++) { flag=0; for(j=0;j<9-i;j++) { if (bh[j]>bh[j+1]) { flag=1; t=bh[j]; bh[j]=bh[j+1]; bh[j+1]=t; strcpy(str,xm[j]); strcpy(xm[j],xm[j+1]); strcpy(xm[j+1],str); } } if (flag==0) break; } for (i=0;i<10;i++) printf("%s %d\n",xm[i],bh[i]); } int zheban (int bh[],int l,int n) { int index=-1; int left=0,right=l,mid=(left+right)/2; while (left<=right) { if (n==bh[mid]) { index=mid; break; } else if (n>bh[mid]) { left=mid+1; mid=(left+right)/2; } else { right=mid-1; mid=(left+right)/2; } } return (index); }
Solution C++
#include <stdio.h> #include <string.h> int main() { void input(char name[][21], int num[]); void sort(char name[][21], int num[]); void check(char name[][21], int num[], int target, char output[]); char name[10][21], output[21]; int num[10]; int i, target; input(name, num); sort(name, num); for (i = 0;i < 10;i++) printf("%s %d\n", name[i], num[i]); scanf("%d", &target); check(name, num, target, output); puts(output); return 0; } void input(char name[][21], int num[]) { int i; for (i = 0;i < 10;i++) scanf("%s%d", name[i], &num[i]); } void sort(char name[][21], int num[]) { int i, j, temp; char tempname[21]; for (i = 0;i < 10;i++) { for (j = i + 1;j < 10;j++) { if (num[i] > num[j]) { temp = num[i]; num[i] = num[j]; num[j] = temp; strcpy(tempname, name[i]); strcpy(name[i], name[j]); strcpy(name[j], tempname); } } } } void check(char name[][21], int num[], int target, char output[]) { int low, high, mid; low = 0; high = 10; while (low < high) { mid = (low + high) / 2; if (num[mid] < target) low = mid + 1; else high = mid; } strcpy(output, name[low]); }