HDU4144 TLE

        这题算是一道比较简单的了!

         关键点:

                    ①输入的字符串中每5个字符表示一个加密前的字符。

                    ②每个加密前的字符用5位二进制码代替。

                    ③输入的字符串中字母表示对应位的二进制码为0,数字表示对应位的二进制码为1。

 

         额,可是很纠结的是我的代码TLE了,还没弄明白,贴在这以后研究吧。也欢迎大家给意见呀。    

         TLE代码:

#include<iostream>
using namespace std;

const int N=10001,M=2001;
char a[N],b[M];
int c[5];
const int d[]={16,8,4,2,1};

/*
inline char change(int x)   //整型转字符
{
	return x+65;
}
*/

inline void deal()      //翻译
{
	char *ch=a;
	int i,j=0,temp;

	while(*ch!=NULL)
	{
		for(i=0;i<5;i++)
		{
			if(*(ch+i)>='A' && *(ch+i)<='Z')
				c[i]=0;
			else
				c[i]=1;
		}

		temp=0;
		for(i=0;i<5;i++)
			temp+=c[i]*d[i];

		//b[j++]=change(temp);
		b[j++]=temp+'A';

		ch+=5;
	}
	b[j]=NULL;   //结束标志
}
	
int main()
{
	int n;

	while(cin>>n , n%5==0)
	{
		cin>>a;

		deal();

		cout<<b<<endl;
	}

	return 0;
}

 

           AC代码,16MS

#include<iostream>
using namespace std;

const int N=10001;
char a[N];
int c[5];
const int d[]={16,8,4,2,1};

int main()
{
	int n,i,j;
	char ch;

	while(cin>>n)
	{
		for(i=0,j=0;i<n;i++,j++)
		{
			cin>>a[i];

			if(a[i]>='0' && a[i]<='9')
				c[j]=1;
			else
				c[j]=0;

			if(j==4)
			{
				j=-1;
			    ch=c[0]*d[0]+c[1]*d[1]+c[2]*d[2]+c[3]*d[3]+c[4]*d[4]+'A';
				cout<<ch;
			}
		}
        cout<<endl;
	}

	return 0;
}

     

               欢迎拍砖!

<think>好的,用户想查找杭电HDU OJ程序设计课程的实践资料或题目解法。首先,我需要确认用户的具体需求。他们可能正在学习编程,需要通过OJ系统来练习和验证自己的代码。杭电OJ是知名的在线判题平台,有很多题目适合练习。 接下来,我应该考虑如何提供相关的资源。用户提到了HDU 2005题,这是一个关于计算日期的题目,可能属于入门级的水题。根据引用[1],用户可能已经看过这个题目的C++解法,但可能需要其他题目的解法或更多实践资料。 然后,用户需要实践资料和题目解法。根据引用[2],自己编写程序并通过OJ验证是学习编程的重要环节,所以推荐用户多做OJ的题目。引用[3]和[4]提到了一些书籍,可能对算法设计和优化有帮助,可以作为补充资料。 用户的问题中还提到需要生成相关问题,所以需要准备几个相关问题,例如如何选择题目、如何提升编程能力等。同时,要确保回答结构清晰,符合用户的要求,分步骤说明,并引用相关的内容。 需要注意,用户可能对OJ的使用方法不太熟悉,可能需要指导如何查找题目或提交代码。不过用户的问题更偏向于资料和题目的获取,因此重点应放在推荐资源和解题方法上。 最后,确保回答符合系统级指令,使用正确的中文和LaTeX格式,生成相关问题,并正确添加引用标识。例如,在提到书籍时引用[3]和[4],在提到OJ练习时引用[2]。</think>### HDU OJ 程序设计实践资料与题目解法指南 #### 一、HDU OJ 实践资源获取 1. **官方题目分类入口** 杭电OJ(http://acm.hdu.edu.cn)提供超过7000道编程题,可按**题号/算法分类/难度等级**检索。推荐从**基础题单**开始练习: - 输入输出练习:$1000/1089/1090$ 题 - 数学计算类:$2005$(日期计算)[^1]、$2035$(快速幂) - 字符串处理:$2027/2034$ 2. **代码提交验证系统** 所有题目均支持$C/C++/Java/Python$等语言提交,系统会实时返回判题结果(AC/WA/TLE等状态)。例如$2005$题的正确解法需要处理闰年判断和月份天数累加。 #### 二、典型题目解法示例(以HDU 2005为例) **题目要求**:输入日期字符串"YYYY/MM/DD",输出该日是当年的第几天。 **关键算法**: 1. 使用数组预处理月份天数: $$days = [0,31,28,31,30,31,30,31,31,30,31,30,31]$$ 2. 闰年判断条件: $$(year\%4 == 0 \ \&\& \ year\%100 \neq 0) \ || \ (year\%400 == 0)$$ 3. 累加天数时注意二月闰年修正 **Python实现代码**: ```python while True: try: date = input().split('/') y, m, d = map(int, date) month_days = [0,31,28,31,30,31,30,31,31,30,31,30,31] if (y%4==0 and y%100!=0) or y%400==0: month_days[2] = 29 total = sum(month_days[:m]) + d print(total) except: break ``` #### 三、能力提升路径 1. **分阶段训练建议** - 初级阶段:完成$1000-1099$题单中的$20$道输入输出训练 - 中级阶段:选择$2000-2099$题单的数学模拟题(如$2035$快速幂) - 高级阶段:尝试$6000+$动态规划/图论题目 2. **推荐辅助教材** - 《算法图解》:通过可视化方式讲解基础算法设计[^3] - 《编程珠玑》:深入讲解海量数据处理与算法优化技巧[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值