C++ 笔试题集锦(2)
来源:互联网 发布:h3c vlan加端口 编辑:程序博客网 时间:2024/06/16 21:26
本篇blog旨在收集平时遇到的一些“稀奇古怪”的面试题。上一篇笔试题blog地址
问题1: 出现频率
问题表述:
从100万url中,找到出现频率最高的100个。
解析:
#include <iostream>#include <fstream>#include <cstdlib>#include <string>#include <vector>#include <list>#include <algorithm>#include <windows.h>using namespace std;bool pcgreater(char *pc1, char *pc2){ if (strcmp(pc1, pc2) > 0) return true; else return false;}int main(){ LONGLONG start_time; LONGLONG end_time; LONGLONG frequency; LONGLONG elapsed; double elapsed_time; char **file = new char*[100 * 10000]; QueryPerformanceFrequency((LARGE_INTEGER*)&frequency); QueryPerformanceCounter((LARGE_INTEGER*)&start_time); srand(1000000); char url[256]; int ilen; string str; for (int i = 0; i < 1000000; i++) { int iRand = rand() % 10000; sprintf(url, "%c,%c,%d,%08x,%08X,", iRand % 26 + 'A', iRand % 26 + 'a', iRand, iRand, iRand, iRand); str = url; ilen = sprintf(url, "%s,%s,%s,%s,%s,%s,%s,%s,\r\n", str.c_str(), str.c_str(), str.c_str(), str.c_str(), str.c_str(), str.c_str(), str.c_str(), str.c_str()); file[i] = new char[ilen + 2]; memcpy(file[i], url, ilen + 1); } QueryPerformanceCounter((LARGE_INTEGER*)&end_time); elapsed = end_time - start_time; elapsed_time = (double)elapsed / frequency; cout << "生成 100万条记录 使用的时间:" << elapsed_time << " 秒" << "\r\n" << endl; cout << "\r\n" << endl; QueryPerformanceCounter((LARGE_INTEGER*)&start_time); FILE *pflOut = fopen("milion_record2.txt", "wb"); for (int i = 0; i < 1000000; i++) { fputs(file[i], pflOut); } fclose(pflOut); QueryPerformanceCounter((LARGE_INTEGER*)&end_time); elapsed = end_time - start_time; elapsed_time = (double)elapsed / frequency; cout << "C写入文件使用的时间:" << elapsed_time << " 秒" << "\r\n" << endl; QueryPerformanceCounter((LARGE_INTEGER*)&start_time); ofstream outfile("milion_record.txt"); for (int i = 0; i < 1000000; i++) { outfile << file[i]; } outfile.close(); QueryPerformanceCounter((LARGE_INTEGER*)&end_time); elapsed = end_time - start_time; elapsed_time = (double)elapsed / frequency; cout << "C++写入文件使用的时间:" << elapsed_time << " 秒" << "\r\n" << endl; //排序部分 vector<char *> file_list(1000000); for (int i = 0; i < 1000000; i++) { file_list[i] = file[i]; } QueryPerformanceCounter((LARGE_INTEGER*)&start_time); sort(file_list.begin(), file_list.end(), pcgreater); QueryPerformanceCounter((LARGE_INTEGER*)&end_time); elapsed = end_time - start_time; elapsed_time = (double)elapsed / frequency; cout << "排序时间" << elapsed_time << " 秒" << "\r\n" << endl; //找出最高100个部分 typedef struct{ char *str; int iNum; }FREQUENCY; FREQUENCY tmp; tmp.iNum = 0; tmp.str = "999"; list<FREQUENCY> rank(100, tmp); list<FREQUENCY>::iterator it_rank = rank.begin(); QueryPerformanceCounter((LARGE_INTEGER*)&start_time); vector<char*>::iterator it, its; int iNum = 1; int ix; its = file_list.begin(); for (it = its + 1; it != file_list.end(); it++) { if (strcmp(*it, *its) != 0) { iNum = it - its; if (iNum > (*it_rank).iNum) continue; for (ix = 0, it_rank = rank.begin(); it_rank != rank.end() && ix<100; it_rank++, ix++) //这里insert的效率不高,影响应当不大,不改了 { if (iNum>(*it_rank).iNum) { tmp.iNum = iNum; tmp.str = *its; rank.insert(it_rank, tmp); break; } } its = it; } } FILE *pflOut2 = fopen("the most 100.txt", "wb"); for (it_rank = rank.begin(), ix = 0; it_rank != rank.end() && ix < 100; it_rank++, ix++) { fprintf(pflOut2, "%d\t%s", (*it_rank).iNum, (*it_rank).str); } QueryPerformanceCounter((LARGE_INTEGER*)&end_time); elapsed = end_time - start_time; elapsed_time = (double)elapsed / frequency; cout << "找出最高100个的时间" << elapsed_time << " 秒" << "\r\n" << endl; QueryPerformanceCounter((LARGE_INTEGER*)&start_time); FILE *pflOut3 = fopen("milion_record3.txt", "wb"); for (int i = 0; i < 1000000; i++) { fputs(file_list[i], pflOut3); } fclose(pflOut3); QueryPerformanceCounter((LARGE_INTEGER*)&end_time); elapsed = end_time - start_time; elapsed_time = (double)elapsed / frequency; cout << "C写入文件使用的时间:" << elapsed_time << " 秒" << "\r\n" << endl; return 0;}
问题2: const 和 define 的区别
const 为常量值,define为宏,宏不是常量,在预处理阶段用于替换。
const 在编译阶段使用;define在预编译阶段使用。
const 有数据类型,做安全检查;define无类型,不做安全检查。
const 占用一份内存,位于静态存储区;define不占用内存,但是会在使用到的地方进行原样替换。
1 0
- 笔试题集锦(2)
- 笔试题集锦(2)
- C、C++笔试题集锦
- C++ 笔试题集锦(2)
- C、C++笔试题、面试题集锦
- iOS的C/C++笔试题集锦
- 《C、C++笔试题集锦+》下载方式
- 笔试题集锦(1)
- 笔试题集锦(1)
- java笔试题集锦(一)
- C++ 笔试题集锦(1)
- Java笔试题集锦
- Java笔试题集锦
- 金山笔试题集锦
- Java笔试题集锦
- Java笔试题集锦
- Java笔试题集锦
- 计算机笔试题集锦
- 指针引起的崩溃分析
- Android 屏幕尺寸、分辨率、像素密度等UI设计参考
- Android学习第七周_网络编程数据处理
- C++编程基础笔记章节五
- OC基础知识笔记——block和复制
- C++ 笔试题集锦(2)
- JQuery 实现页面 loading 效果
- poj 1094 拓扑排序
- Toolbar在WebView滚动下的显示和隐藏的实现
- Google nacl sdk
- OC基础知识笔记——Kochan的书摘抄
- ListView的简单用法
- 谋攻篇(一)
- 第八周项目 指向学生类的指针