(程序设计方法与实践)电话号码问题

电话号码问题

Description

商业单位需要容易记忆的电话号码,有一些方法可以让电话号码变得更容易记忆。譬如,可以把电话号码写成单词或短语,如 MON-GLOP 可以代表滑铁卢大学的电话。有时仅仅是把号码的一部分写成单词,如打 310-GINO 便可向 GINO 比萨饼店定购比萨。另一种让电话号码容易记忆的方法是将数字用一种容易记的方式组合起来,譬如 3-10-10-10 也可以代表 GINO 比萨饼店。

电话号码的标准形式是七位十进制数字,在它的第三位和第四位之间用连字符连接(例如:666-1200)。电话的键盘提供了字符与数字之间的映射关系,如下所示:

在这里插入图片描述
Q 和 Z 没有映射到键盘,而连字符不需要被拨打并且可以根据需要任意添加和删除。MON-GLOP 的标准形式是 666-4567,310-GINO 的标准形式是310-4466,3-10-10-10的标准形式也是 310-1010。

如果两个电话号码有相同的标准形式,那么这两个电话号码是相同的。

你所在的公司正在编辑一本当地商业单位的电话簿,作为质量控制流程的一部分,你需要确认在该电话簿中有没有错误的电话号码,以及有没有两个(或两个以上的)商业单位使用相同的电话号码。由于当地只使用了 3 和 6 两个区段,因此电话号码的第一个数字应当永远是 3 或者 6,如果出现了其它数字,就表示这个电话号码错了。此外,如果电话号码中出现了 Q 和 Z,也说明这个电话错了。

Input

一次输入为一个样例。每个号码一行,每行的字符不会超过20个。每次输入的数据可能会非常大,譬如超过10^6个电话号码。

你可以假设输入中可能会出现重复的电话号码不超过1500个,每个号码重复的次数不超过1000次。

Output

输出包括两个部分,第一个部分是错误的电话号码,对于这些号码应当按照输入的顺序以原始的形式输出。在输出错误电话号码前输出Error:,随后输出这些号码,如果没有错误的电话号码,则输出Not found.

第二部分是重复的正确的电话号码,对每一个在电话簿中以任何形式出现一次以上的电话号码,生成一行输出。这一行应以标准形式给出电话号码,其后跟随一个空格,空格后跟随电话号码在电话簿中出现的次数。所有重复的电话号码输出行应以号码的升序排列(小号码在前)。在输出重复电话号码前输出Duplication,随后按照上述格式输出号码,如果在输入中没有重复的电话号码,则输出:Not found.

Note

你所编写的程序以后可能会在一种特殊的嵌入式设备上运行,为了降低成本,这种设备使用的 CPU 不是很快、可用的 RAM 为 288K(跟 GBA 一样)且它没有磁盘设备因此不能使用文件作为数据的临时存储。

Hint
请参考《编程珠玑》第一部分,若程序不能在规定的内存中运行,则不得分。

在这里插入图片描述

代码如下:

#include<stdio.h>  
#include<string.h>  
#include<stdlib.h>  
struct node  
{
     
    int num;  
    int total;  
}tele[1500];  
   
int cmp(const void *a,const void *b)  
{
     
    return(((struct node *)a)->num-((struct node *)b)->num);     
}     
      
int main()  
{
     
    int flag1=0,flag2=0,flag3,flag4,k=0;  
    int i,j,t,lt,sum=0;  
    char a[20]={
   0},b[125001]={
   0},c[125001]={
   0},d[20]={
   0};  
    for(i
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++通讯录程序设计是一个常见的编程练习项目,它可以帮助你学习和实践C++的基本概念和技巧。下面是一个简单的C++通讯录程序设计的示例: 1. 定义联系人类(Contact):联系人类可以包含姓名、电话号码等信息,并提供相应的成员函数来设置和获取这些信息。 2. 定义通讯录类(AddressBook):通讯录类可以包含多个联系人对象,并提供相应的成员函数来添加、删除、查找和显示联系人信息。 3. 实现通讯录功能:在主函数中,创建一个通讯录对象,并通过菜单选项来执行不同的操作,如添加联系人、删除联系人、查找联系人、显示所有联系人等。 下面是一个简单的示例代码: ```cpp #include <iostream> #include <vector> #include <string> using namespace std; class Contact { private: string name; string phoneNumber; public: Contact(string name, string phoneNumber) { this->name = name; this->phoneNumber = phoneNumber; } string getName() { return name; } string getPhoneNumber() { return phoneNumber; } }; class AddressBook { private: vector<Contact> contacts; public: void addContact(Contact contact) { contacts.push_back(contact); } void removeContact(string name) { for (int i = 0; i < contacts.size(); i++) { if (contacts[i].getName() == name) { contacts.erase(contacts.begin() + i); break; } } } Contact findContact(string name) { for (int i = 0; i < contacts.size(); i++) { if (contacts[i].getName() == name) { return contacts[i]; } } return Contact("", ""); } void displayContacts() { for (int i = 0; i < contacts.size(); i++) { cout << "Name: " << contacts[i].getName() << ", Phone Number: " << contacts[i].getPhoneNumber() << endl; } } }; int main() { AddressBook addressBook; while (true) { cout << "Menu:" << endl; cout << "1. Add Contact" << endl; cout << "2. Remove Contact" << endl; cout << "3. Find Contact" << endl; cout << "4. Display Contacts" << endl; cout << "5. Exit" << endl; int choice; cin >> choice; if (choice == 1) { string name, phoneNumber; cout << "Enter name: "; cin >> name; cout << "Enter phone number: "; cin >> phoneNumber; Contact contact(name, phoneNumber); addressBook.addContact(contact); } else if (choice == 2) { string name; cout << "Enter name: "; cin >> name; addressBook.removeContact(name); } else if (choice == 3) { string name; cout << "Enter name: "; cin >> name; Contact contact = addressBook.findContact(name); if (contact.getName() != "") { cout << "Name: " << contact.getName() << ", Phone Number: " << contact.getPhoneNumber() << endl; } else { cout << "Contact not found." << endl; } } else if (choice == 4) { addressBook.displayContacts(); } else if (choice == 5) { break; } else { cout << "Invalid choice. Please try again." << endl; } } return 0; } ``` 这个示例程序实现了一个简单的通讯录功能,可以通过菜单选项来添加、删除、查找和显示联系人信息。你可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值