1223 - C语言8.27

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

用函数分别实现下列的功能:

(1)     输入10个职工的姓名和职工号;

(2)     按照职工号由小到大的顺序排序,注意需要随之调整姓名顺序;

(3)     输入一个职工号,用折半查找法找出该职工的姓名,要求通过主函数输入要查找的职工号,同时从主函数输出该职工的姓名。

题目输入

共有11行。

前10行中的每一行包含了一个职工的姓名和职工号。姓名是一个不包含空格且长度不超过20的字符串,职工号是一个不小于0且不大于1000的整数。
最后一行包含一个职工号,表示需要查找姓名的职工。保证需要查找的职工号一定出现在已经输入的10个职工信息中。

题目输出

共有11行。

前10行每一行输出按照职工号从小到大排序后的职工信息,包括姓名和职工号,用一个空格隔开。
最后一行输出查找到的职工姓名。
请注意行尾输出换行。

输入/输出样例

输入格式

Zhao 10
Qian 23
Sun 9
Li 0
Zhou 88
Wu 43
Zheng 20
Wang 19
Jiang 26
Dai 79
20

输出格式

Li 0
Sun 9
Zhao 10
Wang 19
Zheng 20
Qian 23
Jiang 26
Wu 43
Dai 79
Zhou 88
Zheng

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);
}

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]);
}

Java解答



import java.util.Arrays;
import java.util.Scanner;

public class Main {
   private static Scanner s = new Scanner(System.in) ;
   
   public static void main(String[] args) {
	  A a[] = new A[10] ;
	   for (int i = 0; i < 10; i++) {
		  a[i] = new A() ;
		  a[i].name = s.next() ;
		  a[i].num = s.nextInt() ;
	  }
	   
	   int num = s.nextInt() ;
	   
	   Arrays.sort(a);
	   
	   for (int i = 0; i < a.length; i++) {
		  System.out.println(a[i].name+" "+a[i].num);
	   }
	   for (int i = 0; i < a.length; i++) {
          if(a[i].num==num){
        	  System.out.println(a[i].name);
          }
	   }
	   
   }
   
}

class A implements Comparable{
	String name ;
	int num ;
	@Override
	public int compareTo(Object o) {
		A a = (A) o ;
		
		if(this.num>a.num){
			return 1 ;
		}else if(this.num==a.num){
		   return 0;
		}else{
			return -1 ;
		}
	}
}