笔试中的一些题目,碰到了几次,写的算法都还有待优化,优化过后的一部分记录如下:
1.翻转字符串:如输入i am a student.处理后为student. a am i
思路一:可以直接用split()函数然后将数组逆向输出,不过既然是笔试应该不是考查api,所以还是老老实实的写算法吧。之前写的是逐个字符读取,将字符逐一放到以字符串中,当读到空格则将字符串放入一个数组,将字符串清空并重新将字符加入字符串……循环完后由于字符串最后没有空格则直接将最后的串加入……
public class ReverseSentence
{
static char[] c="i am a student.".toCharArray();
public static void main(String[] args)
{
List list=new ArrayList();
String temp="";
for(int i=0;i<c.length;i++)
{
if(c[i]!=' ')
temp+=c[i];//将不为空的字符加入字符串
else
{
list.add(temp);//将拆分出的单词加入列表
temp="";
}
}
list.add(temp);//加入最后一个单词
String r="";
for(int j=list.size()-1;j>=0;j--)
{
r+=list.get(j)+" ";
}
System.out.println(r);
}
}
现在想着都汗~这种代码都能写出来……
思路二:下面是优化过的代码,是采取先所有逆序 然后再以空格为界再对每个单词逆序
public class ReverseSentence
{
static char[] c="i am a student.".toCharArray();
public static void reverse(char[] c,int begin,int end)
{
char temp;
while(begin<end)
{
temp=c[begin];
c[begin]=c[end];
c[end]=temp;
begin++;
end--;
}
}
public static void main(String[] args)
{
int begin,end;
int len=c.length-1;
reverse(c,0,len);//将整个句子逆序
while(end<=len)
{
if(c[i]!=' ')
end++;
else
{
reverse(c,begin,end-1);//将空格以前的单词逆序
end++;
begin=end;//从下个单词处继续开始
}
}
System.out.println(c);
}
}
2.逆序输出整数1658738
这个题目当时的算法也很差劲,后来发觉可以这样写:
public int reverseInteger(int n)
{
int sum=0;
while(n!=0)
{
sum=sum*10+n%10;
n=n/10;
}
return sum;
}
这样很简洁,每次取出一位,将之前的结果扩大十倍在一直求和!
3.将两个递增的数组合并且按由小到大排序
这个题目直接就想到了数据结构中将两个有序链表合并那部分,java中没有指针就用数组下标了
static int[] a = { 1, 2, 3, 5, 7, 9 };
static int[] b = { 2, 3, 4, 6, 8 };
public static List mergeSort(int[] a, int[] b) {
List list = new ArrayList();
int index = 0;
int i, j;
for (i = 0, j = 0; i < a.length && j < b.length;) {
if (a[i] == b[j]) {//相等的话则加入并且下标都加1
list.add(a[i]);
i++;
j++;
} else {
if (a[i] > b[j]) {
list.add(b[j]);//元素较小的数组小标加1
j++;
} else {
list.add(a[i]);//元素较小的数组小标加1
i++;
}
}
}
while (i < a.length) {//将剩下的元素加入
list.add(a[i]);
i++;
}
while (j < b.length) {
list.add(b[j]);
j++;
}
return list;
}
这个是求并集的算法,稍作修改就可以得到求交集的算法了。
分享到:
相关推荐
这是出的几个关于程序设计的几个题目。希望大家下下来认真完成
《ACM程序设计》详细讲解了ACM国际大学生程序设计竞赛(ACM/ICPC)编程、调试方法,以及提高时间、空间性能的策略,并充分利用了c++泛型编程的高效率、规范化的特性,全部采用c++泛型编程。 第1章讲解了ACM程序设计...
《C程序设计(第四版)》保持了前三版的写作风格和概念清晰、通俗易懂的特点,并在以下几个方面作了修改: (1) 按照C99标准进行介绍,以适应C语言的发展,使编写程序更加规范 (2)采用编译系统 (3)加强算法,以...
对于非计算机专业的学生来说,仅掌握一门程序设计语言的语法规则,写几个打印由星号组成的三角形之类的“玩具”程序,而对计算机科学的基础与灵魂 -- 算法一无所知,不明白计算机到底是怎么解决问题的,那么在日后的...
百度之星程序设计大赛题目,大家可以看看,要是考研的话,能会几个,挺有意思的,呵呵!
在这部分中提供了由谭浩强编著的《C++程序设计》(清华大学出版社出版)一书中各章的例题程序,以方便教师进行教学,也便于读者上机运行这些程序以及在此基础上修改和调试程序。 程序按章设立文件夹(子目录),如文件夹...
时间函数举例程序分析 2.程序源代码: #include "stdio.h" #include "time.h" void main() { time_t lt; /*define a longint time varible*/ lt=time(NULL);/*system time and date*/ printf(ctime(<)); /*...
C语言课程设计的优点主要体现在以下几个方面: 基础性强:C语言是一门基础性的编程语言,它直接涉及到计算机的内存管理、指针操作等底层知识。学习C语言有助于深入理解计算机的工作原理,为后续学习其他高级语言...
沈 阳 工 程 学 院 课 程 设 计 设计题目: WEB程序设计课程设计 -----在线考试系统的开发 系 别 信息工程系 班级 学生姓名 学号 指导教师 职称 起止日期:2011年8月29日起——至2011年9月2日止 沈 阳 工 程 学 院 ...
对于非计算机专业的学生来说,仅掌握一门程序设计语言的语法规则,写几个打印由星号组成的三角形之类的“玩具”程序,而对计算机科学的基础与灵魂 --- 算法一无所知,不明白计算机到底是怎么解决问题的,那么在日后...
VB的几个题目,收集中,面向对象的程序设计语言。适合初级学习者。
本程序选题参考大作业题目一。实现3D建模的多个功能。 本程序的实现意义丰富。 3D技术的不断进步,在未来的几年时间里,将会有越来越多的互联网应用以3D的方式呈现给用户,包括网络视讯、电子阅读、虚拟社区、网络...
这是几个ACM程序设计的题目,大家可以下载查看练习编程技巧!
计算机程序设计课程的教学中,上机实验占1/3以上,如何搞好实验教学,培养学生实际的编程能力,是当前计算机程序设计课程教学改革的一个重要方面。目前大多数院校的Visual Basic程序设计教学,一般由教师根据教材,...
在上机实习的基础上再进一步发展,适当地,有针对性地训练我们的程序设计能力以及上机调试程序的基本技能。利用连续几天的课程设计时间来编写一些主题明确,具有一定使用价值的中小型程序:从选题开始,独立设计,...
题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。 1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。 2.程序源代码...
在main函数中构造几个学生的成绩,并用数组表示,通过调用aver_score函数计算其平均成绩并显示。 指针程序设计全文共8页,当前为第1页。【题目5-2】代码及运行结果: 指针程序设计全文共8页,当前为第1页。 【题目5-...
C语言课程设计的优点主要体现在以下几个方面: 基础性强:C语言是一门基础性的编程语言,它直接涉及到计算机的内存管理、指针操作等底层知识。学习C语言有助于深入理解计算机的工作原理,为后续学习其他高级语言...
由于采用了函数模块式的结构, C语言易于实现结构化程序设计。使程序的层次结构清晰,便于程序的编写、阅读、调试。 在C语言中可从不同的角度对函数分类。 1. 从函数定义的角度看,函数可分为库函数和用户...
计算机程序设计比赛试卷[修改版] 第一篇:计算机程序设计比赛试卷 计算机程序设计比赛试卷 (考试时间120分钟,总分100分 ) 说明: 1、比赛使用语言:C、C++、VB 2、题目完成后,存放在D:\Test下以题号名单的...