QQ帐户的申请与登陆

实现QQ新帐户申请和老帐户登陆的简化版功能。最大挑战是:据说现在的QQ号码已经有10位数了。

输入格式:

输入首先给出一个正整数N105),随后给出N行指令。每行指令的格式为:“命令符(空格)QQ号码(空格)密码”。其中命令符为“N”(代表New)时表示要新申请一个QQ号,后面是新帐户的号码和密码;命令符为“L”(代表Login)时表示是老帐户登陆,后面是登陆信息。QQ号码为一个不超过10位、但大于1000(据说QQ老总的号码是1001)的整数。密码为不小于6位、不超过16位、且不包含空格的字符串。

输出格式:

针对每条指令,给出相应的信息:

1)若新申请帐户成功,则输出“New: OK”;
2)若新申请的号码已经存在,则输出“ERROR: Exist”;
3)若老帐户登陆成功,则输出“Login: OK”;
4)若老帐户QQ号码不存在,则输出“ERROR: Not Exist”;
5)若老帐户密码错误,则输出“ERROR: Wrong PW”。

输入样例:

5
L 1234567890 myQQ@qq.com
N 1234567890 myQQ@qq.com
N 1234567890 myQQ@qq.com
L 1234567890 myQQ@qq
L 1234567890 myQQ@qq.com

输出样例:

ERROR: Not Exist
New: OK
ERROR: Exist
ERROR: Wrong PW
Login: OK
作者: DS课程组
单位: 浙江大学
时间限制: 1200ms
内存限制: 64MB
代码长度限制: 16KB

编译器

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define MAXTABLESIZE 100000
typedef struct Q* QQ;
struct Q{
	int ID;
	char pwd[17];
	QQ next;
};
typedef struct Q* List;

typedef struct TblNode* HashTable;
struct TblNode{    //散列表节点定义 
	int TableSize; /* 表的最大长度 */
	List Heads; 
};

int NextPrime(int N)
{
	int i, p = (N%2) ? N+2 : N+1;
	while(p<=MAXTABLESIZE){
	    /* for循环用来判断p是不是素数 */ 
		for(i=(int)sqrt(p); i>2;i--)  
			if(!(p%i)) break;  /* p不是素数break */
		 
		if(i==2)  break;   /* p是素数 结束for循环 */ 
		else p+=2;   /* P不是素数,p+2继续向后找 */ 
	}
	return p;
}
HashTable CreateTable(int TableSize)
{
   HashTable H;
   int i;
   H=(HashTable)malloc(sizeof(struct TblNode));
   /* 保证散列表的最大长度是素数 */
   H->TableSize=NextPrime(TableSize);
   H->Heads=(QQ)malloc(H->TableSize*sizeof(struct Q));
   for(i=0;i<H->TableSize;i++)  //初始化 
   {
     H->Heads[i].ID = 0;
     H->Heads[i].pwd[0] = '\0';
     H->Heads[i].next = NULL;
   }
   return H;
}
int Hash(int key, int HashTableSize) 
{
	return key%HashTableSize;
}
void New(HashTable H,int ID,char pwd[])   //申请QQ
{
	int pos;
	QQ user;
	pos=Hash(ID,H->TableSize);
	user=H->Heads[pos].next;
	while(user){
		if(user->ID==ID)                    //有相同的ID就退出循环
			break;
		else
		user=user->next;
	}
	if(user==NULL){                        //表明没有相同的ID,开始申请QQ
		/* 头插法 申请 */
		QQ NewNode=(QQ)malloc(sizeof(struct Q));
		NewNode->ID=ID;
		strcpy(NewNode->pwd,pwd);
		NewNode->next=H->Heads[pos].next;
		H->Heads[pos].next=NewNode;
		printf("New: OK\n");
	}
	else                                   
	   printf("ERROR: Exist\n");
}
void Login(HashTable H,int ID,char pwd[])  //登录QQ
{
  int pos;
	QQ user;
	pos=Hash(ID,H->TableSize);
	user=H->Heads[pos].next;
	while(user){
		if(user->ID==ID)
		{
			if(strcmp(user->pwd,pwd)==0)
			  printf("Login: OK\n");
			else
			  printf("ERROR: Wrong PW\n"); 
			break;
		}
		else
		  user=user->next;
	}
	if(user==NULL)
	  printf("ERROR: Not Exist\n");
}
int main()
{
  int N,ID,TableSize;
  char c,pwd[17];
  scanf("%d",&N);
  TableSize=NextPrime(N);
  HashTable H=CreateTable(TableSize);
  getchar();    //接收换行符 
  for(int i=0;i<N;i++)
  {
  	scanf("%c %d %s",&c,&ID,pwd);
	if(c=='N')
		New(H,ID,pwd);   //申请QQ 
	else
		Login(H,ID,pwd); //登录QQ 
	getchar();  //接收换行符 
  }
  return 0;
}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Android开发中,集成微信和QQ登录通常涉及到使用第三方提供的SDK,因为这两个平台提供了官方的开放接口供开发者接入。以下是集成微信和QQ登录的基本步骤: 1. **注册账号**:首先,你需要在微信开放平台(https://open.weixin.qq.com)和QQ开放平台(https://open.qq.com)上创建开发者账户,并申请相应的AppID。 2. **下载SDK**:从各自的官网下载微信Android SDK(WeChatForAndroid)和QQ登录SDK。 3. **添加依赖**:将SDK添加到你的项目中,通常是通过Gradle库管理或者将jar文件添加到项目的libs目录。 4. **配置权限**:在AndroidManifest.xml中添加必要的权限,如`<uses-permission android:name="android.permission.INTERNET" />`。 5. **初始化SDK**:在应用启动时,初始化微信和QQ的登录模块,设置回调和应用信息。 6. **调用授权登录**:当用户需要登录时,调用SDK提供的`login()`或`authorize()`方法,会跳转到相应平台的授权页面。 7. **处理回调**:在接收到用户的登录结果后,通过回调处理机制获取code、access_token等信息。 8. **交换token**:使用获取到的code换取长期有效的token,用于后续的API调用。 9. **保存用户信息**:将登录状态和用户信息存储在本地,比如SharedPreferences或数据库。 **相关问题--:** 1. 需要哪些Android权限来集成微信和QQ登录? 2. 在授权成功后,如何将获取到的用户信息同步到本地? 3. 如何处理微信和QQ登录过程中可能出现的错误或异常情况?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值