華爲機試——硬盤容量排序

題目

* 題目:將輸入的容量進行排序
* 輸入描述:先輸入磁盤的數量,然後依次輸入磁盤的容量
* 輸出描述:將輸入的磁盤容量排序
* 輸入示例:
* 3
* 2T
* 5G
* 3M
* 輸出示例:
* 3M
* 5G
* 2T

測試代碼

/*--------------------------------------------------------
* 題目:將輸入的容量進行排序
* 輸入描述:先輸入磁盤的數量,然後依次輸入磁盤的容量
* 輸出描述:將輸入的磁盤容量排序
* 輸入示例:
* 3
* 2T
* 5G
* 3M
* 輸出示例:
* 3M
* 5G
* 2T
*-------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

#define DISK_NUM		100		/* 最多可以容納的磁盤數量 */
#define BUF_SIZE		128
#define DEBUG

int g_disk_num = 0;

/* 定義相應的結構體 */
typedef struct disk_data
{
	char disk_info[BUF_SIZE];
	long long disk_size;
}DISK_T;

/* 將相應的容量換算成數字 */
int convert_to_num(DISK_T* src)
{
	char tmp_buf[BUF_SIZE];
	int num_mul=0;
	if(NULL == src)
	{
#ifdef DEBUG
		printf("[Error]:input is null!Func:%s Line:%d\n",__FUNCTION__,__LINE__);
#endif
		return -1;
	}
	
	memset(tmp_buf,0,sizeof(tmp_buf));
	memcpy(tmp_buf,src->disk_info,strlen(src->disk_info)-1);
#ifdef DEBUG
	printf("[Debug]:disk number=%s\n",tmp_buf);
#endif	
	switch(src->disk_info[strlen(src->disk_info)-1])
	{
		case 'm':
		case 'M':
			num_mul = 1;
			break;
		case 'g':
		case 'G':
			num_mul = 1024;
			break;
		case 't':
		case 'T':
			num_mul = 1024*1024;
			break;
		case 'p':
		case 'P':
			num_mul = 1024*1024*1024;
			break;
		default:
			return -1;
			break;			
	}
	src->disk_size = (long long)atoi(tmp_buf) * num_mul;
#ifdef DEBUG
	printf("[提示]:轉換成數字爲:%lld\n",src->disk_size);
#endif
	return 0;
}

void disk_sort(DISK_T* src)
{
	int i,j;
	DISK_T tmp;
	if(NULL == src)
	{
#ifdef DEBUG
		printf("[Error]:input is null!Func:%s Line:%d\n",__FUNCTION__,__LINE__);
#endif
		return;			
	}
	
	/* 冒泡排序,將結構體置換 */
	for(i=0;i<g_disk_num;i++)
	{
		for(j=i;j<g_disk_num;j++)
		{
			if( ((src+i)->disk_size) > ((src+j)->disk_size))		/* >:升序  <:降序 */
			{
				memset(&tmp,0,sizeof(DISK_T));
#ifdef DEBUG
				printf("[提示]:i->size=%lld j->size=%lld\n",(src+i)->disk_size,(src+j)->disk_size);
#endif				
				memcpy(&tmp,src+i,sizeof(DISK_T));
				memcpy(src+i,src+j,sizeof(DISK_T));
				memcpy(src+j,&tmp,sizeof(DISK_T));
			}
		}
	}
}

int main()
{
	int disk_num = 0;
	int i = 0;
	DISK_T disk_buf[DISK_NUM];

	memset(disk_buf,0,sizeof(DISK_T)*DISK_NUM);
#ifdef DEBUG
	printf("[提示]:輸入硬盤的數量:");
#endif
	scanf("%d",&disk_num);
	g_disk_num = disk_num;
	
	while(disk_num)
	{
#ifdef DEBUG
		printf("[提示]:請輸入第%d個硬盤的容量:",disk_num-1);
#endif
		scanf("%s",disk_buf[disk_num-1].disk_info);
		
		convert_to_num(&disk_buf[disk_num-1]);
		disk_num --;
	}
	disk_sort(disk_buf);
	for(i=0;i<g_disk_num;i++)
	{
#ifdef DEBUG
		printf("第%d塊硬盤容量:%s\n",i,disk_buf[i].disk_info);
#else
		printf("%s\n",disk_buf[i].disk_info);
#endif
	}
}

測試描述

注意事項

注意輸入的字符串需要轉換後進行排序比較。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章