数字反转编译
⑴ java题目
J2EE Java2平台企业版
string是引用数据类型
如何取得年月日,小时分秒
public static void main(String[] args)
{
ActionListener time = new ActionListener() { // 监听事件,不然实现不了动态改变时间
public void actionPerformed(ActionEvent e) {
//date对象代表当前的系统时间(毫秒)
Date date = new Date();
//format对象是用来以指定的时间格式格式化时间的
SimpleDateFormat from = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss"); //这里的格式可以自己设置
//format()方法是用来格式化时间的方法
String times = from.format(date);
System.out.println(times); }
};
Timer tim = new Timer(1000, time); //这里表示1000毫秒更新一下时间
tim.start(); //启动
}
我这个答案肯定正确啊
下面帮你解释你的答案吧
Date //是在java.util.Date;里面
SimpleDateForma //这个是java.text.SimpleDateFormat;用来输出问本格式的
DateFormat //应该是在java.util.*;里面吧..应该是的
你那个错误是编译就没通过啊
public class Test
那你那个编译写的因该是
javac Test.java 编译的应该是类啊而不是javac time.java 请问你的time什么意思呢,所以你报的异常是找不到time类啊
呵呵...你是初学java吧该答的我都答完了拉!还特地帮你每句都写
如何读写文件
StringBuffer sb = new StringBuffer();
//File file = new FileWindow().load();
File file;
file = new File("F:/jtest/from.txt");
TextReader tr = new TextReader(file);
sb.append(tr.readAll());
Out.println(sb.toString());
String [] tags = {"\"", " ", "'"};
String str;
str = sb.toString();
for(String reg: tags) {
Out.println(reg);
str = str.replaceAll(reg, "");
}
Out.println(str);
抽象类和接口的区别
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
主键是确定数据库中的表的记录的唯一标识字段,可以是表中的一个字段,也可以是表中的多个字段组成的。一旦确定为主键,则该字段不可为空也不可以重复。比如学生表中的学号就可以定义成该表的字段
外键的定义是相对于主键而言的,比如另有一张成绩表,表中也出现了学生表中的对应学号字段,则相对于学生表,学号就是成绩表的外键
String和StringBuffer的区别
STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法
try{}catch(){}finally{}结构,try{}内出现异常,try{}内剩下尚未执行的代码还执行吗,finally{}内的代码呢?finally{}后面的代码呢
执行 finally{}内的代码最后执行
排序算法
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。
分类
在计算机科学所使用的排序算法通常被分类为:
计算的复杂度(最差、平均、和最好表现),依据串行(list)的大小(n)。一般而言,好的表现是O。(n log n),且坏的行为是Ω(n2)。对于一个排序理想的表现是O(n)。仅使用一个抽象关键比较运算的排序算法总平均上总是至少需要Ω(n log n)。
记忆体使用量(以及其他电脑资源的使用)
稳定度:稳定排序算法会依照相等的关键(换言之就是值)维持纪录的相对次序。也就是一个排序算法是稳定的,就是当有两个有相等关键的纪录R和S,且在原本的串行中R出现在S之前,在排序过的串行中R也将会是在S之前。
一般的方法:插入、交换、选择、合并等等。交换排序包含冒泡排序(bubble sort)和快速排序(quicksort)。选择排序包含shaker排序和堆排序(heapsort)。
当相等的元素是无法分辨的,比如像是整数,稳定度并不是一个问题。然而,假设以下的数对将要以他们的第一个数字来排序。
(4, 1) (3, 1) (3, 7) (5, 6)
在这个状况下,有可能产生两种不同的结果,一个是依照相等的键值维持相对的次序,而另外一个则没有:
(3, 1) (3, 7) (4, 1) (5, 6) (维持次序)
(3, 7) (3, 1) (4, 1) (5, 6) (次序被改变)
不稳定排序算法可能会在相等的键值中改变纪录的相对次序,但是稳定排序算法从来不会如此。不稳定排序算法可以被特别地时作为稳定。作这件事情的一个方式是人工扩充键值的比较,如此在其他方面相同键值的两个物件间之比较,就会被决定使用在原先资料次序中的条目,当作一个同分决赛。然而,要记住这种次序通常牵涉到额外的空间负担。
排列算法列表
在这个表格中,n是要被排序的纪录数量以及k是不同键值的数量。
稳定的
冒泡排序(bubble sort) — O(n2)
鸡尾酒排序 (Cocktail sort, 双向的冒泡排序) — O(n2)
插入排序 (insertion sort)— O(n2)
桶排序 (bucket sort)— O(n); 需要 O(k) 额外 记忆体
计数排序 (counting sort) — O(n+k); 需要 O(n+k) 额外 记忆体
归并排序 (merge sort)— O(n log n); 需要 O(n) 额外记忆体
原地归并排序 — O(n2)
二叉树排序 (Binary tree sort) — O(n log n); 需要 O(n) 额外记忆体
鸽巢排序 (Pigeonhole sort) — O(n+k); 需要 O(k) 额外记忆体
基数排序 (radix sort)— O(n·k); 需要 O(n) 额外记忆体
Gnome sort — O(n2)
Library sort — O(n log n) with high probability, 需要 (1+ε)n 额外记忆体
不稳定
选择排序 (selection sort)— O(n2)
希尔排序 (shell sort)— O(n log n) 如果使用最佳的现在版本
Comb sort — O(n log n)
堆排序 (heapsort)— O(n log n)
Smoothsort — O(n log n)
快速排序 (quicksort)— O(n log n) 期望时间, O(n2) 最坏情况; 对于大的、乱数串行一般相信是最快的已知排序
Introsort — O(n log n)
Patience sorting — O(n log n + k) 最外情况时间, 需要 额外的 O(n + k) 空间, 也需要找到最长的递增子序列(longest increasing subsequence)
不实用的排序算法
Bogo排序 — O(n × n!) 期望时间, 无穷的最坏情况。
Stupid sort — O(n3); 递回版本需要 O(n2) 额外记忆体
Bead sort — O(n) or O(√n), 但需要特别的硬体
Pancake sorting — O(n), 但需要特别的硬体
排序的算法
排序的算法有很多,对空间的要求及其时间效率也不尽相同。下面列出了一些常见的排序算法。这里面插入排序和冒泡排序又被称作简单排序,他们对空间的要求不高,但是时间效率却不稳定;而后面三种排序相对于简单排序对空间的要求稍高一点,但时间效率却能稳定在很高的水平。基数排序是针对关键字在一个较小范围内的排序算法。
插入排序
冒泡排序
选择排序
快速排序
堆排序
归并排序
基数排序
希尔排序
插入排序
插入排序是这样实现的:
首先新建一个空列表,用于保存已排序的有序数列(我们称之为"有序列表")。
从原数列中取出一个数,将其插入"有序列表"中,使其仍旧保持有序状态。
重复2号步骤,直至原数列为空。
插入排序的平均时间复杂度为平方级的,效率不高,但是容易实现。它借助了"逐步扩大成果"的思想,使有序列表的长度逐渐增加,直至其长度等于原列表的长度。
冒泡排序
冒泡排序是这样实现的:
首先将所有待排序的数字放入工作列表中。
从列表的第一个数字到倒数第二个数字,逐个检查:若某一位上的数字大于他的下一位,则将它与它的下一位交换。
重复2号步骤,直至再也不能交换。
冒泡排序的平均时间复杂度与插入排序相同,也是平方级的,但也是非常容易实现的算法。
选择排序
选择排序是这样实现的:
设数组内存放了n个待排数字,数组下标从1开始,到n结束。
i=1
从数组的第i个元素开始到第n个元素,寻找最小的元素。
将上一步找到的最小元素和第i位元素交换。
如果i=n-1算法结束,否则回到第3步
选择排序的平均时间复杂度也是O(n²)的。
快速排序
现在开始,我们要接触高效排序算法了。实践证明,快速排序是所有排序算法中最高效的一种。它采用了分治的思想:先保证列表的前半部分都小于后半部分,然后分别对前半部分和后半部分排序,这样整个列表就有序了。这是一种先进的思想,也是它高效的原因。因为在排序算法中,算法的高效与否与列表中数字间的比较次数有直接的关系,而"保证列表的前半部分都小于后半部分"就使得前半部分的任何一个数从此以后都不再跟后半部分的数进行比较了,大大减少了数字间不必要的比较。但查找数据得另当别论了。
堆排序
堆排序与前面的算法都不同,它是这样的:
首先新建一个空列表,作用与插入排序中的"有序列表"相同。
找到数列中最大的数字,将其加在"有序列表"的末尾,并将其从原数列中删除。
重复2号步骤,直至原数列为空。
堆排序的平均时间复杂度为nlogn,效率高(因为有堆这种数据结构以及它奇妙的特征,使得"找到数列中最大的数字"这样的操作只需要O(1)的时间复杂度,维护需要logn的时间复杂度),但是实现相对复杂(可以说是这里7种算法中比较难实现的)。
看起来似乎堆排序与插入排序有些相像,但他们其实是本质不同的算法。至少,他们的时间复杂度差了一个数量级,一个是平方级的,一个是对数级的。
平均时间复杂度
插入排序 O(n2)
冒泡排序 O(n2)
选择排序 O(n2)
快速排序 O(n log n)
堆排序 O(n log n)
归并排序 O(n log n)
基数排序 O(n)
希尔排序 O(n1.25)
一、术语session
在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的含义是相同的。
session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。有时候我们可以看到这样的话“在一个浏览器会话期间,...”,这里的会话一词用的就是其本义,是指从一个浏览器窗口打开到关闭这个期间①。最混乱的是“用户(客户端)在一次会话期间”这样一句话,它可能指用户的一系列动作(一般情况下是同某个具体目的相关的一系列动作,比如从登录到选购商品到结账登出这样一个网上购物的过程,有时候也被称为一个transaction),然而有时候也可能仅仅是指一次连接,也有可能是指含义①,其中的差别只能靠上下文来推断②。
然而当session一词与网络协议相关联时,它又往往隐含了“面向连接”和/或“保持状态”这样两个含义,“面向连接”指的是在通信双方在通信之前要先建立一个通信的渠道,比如打电话,直到对方接了电话通信才能开始,与此相对的是写信,在你把信发出去的时候你并不能确认对方的地址是否正确,通信渠道不一定能建立,但对发信人来说,通信已经开始了。“保持状态”则是指通信的一方能够把一系列的消息关联起来,使得消息之间可以互相依赖,比如一个服务员能够认出再次光临的老顾客并且记得上次这个顾客还欠店里一块钱。这一类的例子有“一个TCP session”或者“一个POP3 session”③。
而到了web服务器蓬勃发展的时代,session在web开发语境下的语义又有了新的扩展,它的含义是指一类用来在客户端与服务器之间保持状态的解决方案④。有时候session也用来指这种解决方案的存储结构,如“把xxx保存在session里”⑤。由于各种用于web开发的语言在一定程度上都提供了对这种解决方案的支持,所以在某种特定语言的语境下,session也被用来指代该语言的解决方案,比如经常把Java里提供的javax.servlet.http.HttpSession简称为session⑥。
鉴于这种混乱已不可改变,本文中session一词的运用也会根据上下文有不同的含义,请大家注意分辨。
在本文中,使用中文“浏览器会话期间”来表达含义①,使用“session机制”来表达含义④,使用“session”表达含义⑤,使用具体的“HttpSession”来表达含义⑥
二、HTTP协议与状态保持
HTTP协议本身是无状态的,这与HTTP协议本来的目的是相符的,客户端只需要简单的向服务器请求下载某些文件,无论是客户端还是服务器都没有必要纪录彼此过去的行为,每一次请求之间都是独立的,好比一个顾客和一个自动售货机或者一个普通的(非会员制)大卖场之间的关系一样。
然而聪明(或者贪心?)的人们很快发现如果能够提供一些按需生成的动态信息会使web变得更加有用,就像给有线电视加上点播功能一样。这种需求一方面迫使HTML逐步添加了表单、脚本、DOM等客户端行为,另一方面在服务器端则出现了CGI规范以响应客户端的动态请求,作为传输载体的HTTP协议也添加了文件上载、cookie这些特性。其中cookie的作用就是为了解决HTTP协议无状态的缺陷所作出的努力。至于后来出现的session机制则是又一种在客户端与服务器之间保持状态的解决方案。
让我们用几个例子来描述一下cookie和session机制之间的区别与联系。笔者曾经常去的一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠,然而一次性消费5杯咖啡的机会微乎其微,这时就需要某种方式来纪录某位顾客的消费数量。想象一下其实也无外乎下面的几种方案:
1、该店的店员很厉害,能记住每位顾客的消费数量,只要顾客一走进咖啡店,店员就知道该怎么对待了。这种做法就是协议本身支持状态。
2、发给顾客一张卡片,上面记录着消费的数量,一般还有个有效期限。每次消费时,如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来。这种做法就是在客户端保持状态。
3、发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次消费时,如果顾客出示该卡片,则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种做法就是在服务器端保持状态。
由于HTTP协议是无状态的,而出于种种考虑也不希望使之成为有状态的,因此,后面两种方案就成为现实的选择。具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择。
三、理解cookie机制
cookie机制的基本原理就如上面的例子一样简单,但是还有几个问题需要解决:“会员卡”如何分发;“会员卡”的内容;以及客户如何使用“会员卡”。
正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。
而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。意思是麦当劳的会员卡只能在麦当劳的店里出示,如果某家分店还发行了自己的会员卡,那么进这家店的时候除了要出示麦当劳的会员卡,还要出示这家店的会员卡。
cookie的内容主要包括:名字,值,过期时间,路径和域。
其中域可以指定某一个域比如.google.com,相当于总店招牌,比如宝洁公司,也可以指定一个域下的具体某台机器比如www.google.com或者froogle.google.com,可以用飘柔来做比。
路径就是跟在域名后面的URL路径,比如/或者/foo等等,可以用某飘柔专柜做比。
路径与域合在一起就构成了cookie的作用范围。
如果不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。
存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。对于IE,在一个打开的窗口上按Ctrl-N(或者从文件菜单)打开的窗口可以与原窗口共享,而使用其他方式新开的IE进程则不能共享已经打开的窗口的内存cookie;对于Mozilla Firefox0.8,所有的进程和标签页都可以共享同样的cookie。一般来说是用javascript的window.open打开的窗口会与原窗口共享内存cookie。浏览器对于会话cookie的这种只认cookie不认人的处理方式经常给采用session机制的web应用程序开发者造成很大的困扰。
下面就是一个goolge设置cookie的响应头的例子
HTTP/1.1 302 Found
Location: http://www.google.com/intl/zh-CN/
Set-Cookie: PREF=ID=0565f77e132de138:NW=1:TM=1098082649:LM=1098082649:S=KaeaCFPo49RiA_d8; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com
Content-Type: text/html
这是使用HTTPLook这个HTTP Sniffer软件来俘获的HTTP通讯纪录的一部分
浏览器在再次访问goolge的资源时自动向外发送cookie
使用Firefox可以很容易的观察现有的cookie的值
使用HTTPLook配合Firefox可以很容易的理解cookie的工作原理。
IE也可以设置在接受cookie前询问
这是一个询问接受cookie的对话框。
四、理解session机制
session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。
当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。
保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID,而。比如weblogic对于web应用程序生成的cookie,JSESSIONID=!-145788764,它的名字就是JSESSIONID。
由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,表现形式为http://...../xxx;jsessionid=!-145788764
另一种是作为查询字符串附加在URL后面,表现形式为http://...../xxx?jsessionid=!-145788764
这两种方式对于用户来说是没有区别的,只是服务器在解析的时候处理的方式不同,采用第一种方式也有利于把session id的信息和正常程序参数区分开来。
为了在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个session id。
另一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。比如下面的表单
<form name="testform" action="/xxx">
<input type="text">
</form>
在被传递给客户端之前将被改写成
<form name="testform" action="/xxx">
<input type="hidden" name="jsessionid" value="!-145788764">
<input type="text">
</form>
这种技术现在已较少应用,笔者接触过的很古老的iPlanet6(SunONE应用服务器的前身)就使用了这种技术。
实际上这种技术可以简单的用对action应用URL重写来代替。
在谈论session机制的时候,常常听到这样一种误解“只要关闭浏览器,session就消失了”。其实可以想象一下会员卡的例子,除非顾客主动对店家提出销卡,否则店家绝对不会轻易删除顾客的资料。对session来说也是一样的,除非程序通知服务器删除一个session,否则服务器会一直保留,程序一般都是在用户做log off的时候发个指令去删除session。然而浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器根本不会有机会知道浏览器已经关闭,之所以会有这种错觉,是大部分session机制都使用会话cookie来保存session id,而关闭浏览器后这个session id就消失了,再次连接服务器时也就无法找到原来的session。如果服务器设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的HTTP请求头,把原来的session id发送给服务器,则再次打开浏览器仍然能够找到原来的session。
恰恰是由于关闭浏览器不会导致session被删除,迫使服务器为seesion设置了一个失效时间,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空间。
五、理解javax.servlet.http.HttpSession
HttpSession是Java平台对session机制的实现规范,因为它仅仅是个接口,具体到每个web应用服务器的提供商,除了对规范支持之外,仍然会有一些规范里没有规定的细微差异。这里我们以BEA的Weblogic Server8.1作为例子来演示。
首先,Weblogic Server提供了一系列的参数来控制它的HttpSession的实现,包括使用cookie的开关选项,使用URL重写的开关选项,session持久化的设置,session失效时间的设置,以及针对cookie的各种设置,比如设置cookie的名字、路径、域,cookie的生存时间等。
一般情况下,session都是存储在内存里,当服务器进程被停止或者重启的时候,内存里的session也会被清空,如果设置了session的持久化特性,服务器就会把session保存到硬盘上,当服务器进程重新启动或这些信息将能够被再次使用,Weblogic Server支持的持久性方式包括文件、数据库、客户端cookie保存和复制。
复制严格说来不算持久化保存,因为session实际上还是保存在内存里,不过同样的信息被复制到各个cluster内的服务器进程中,这样即使某个服务器进程停止工作也仍然可以从其他进程中取得session。
cookie生存时间的设置则会影响浏览器生成的cookie是否是一个会话cookie。默认是使用会话cookie。有兴趣的可以用它来试验我们在第四节里提到的那个误解。
cookie的路径对于web应用程序来说是一个非常重要的选项,Weblogic Server对这个选项的默认处理方式使得它与其他服务器有明显的区别。后面我们会专题讨论。
关于session的设置参考[5] http://e-docs.bea.com/wls/docs70/webapp/weblogic_xml.html#1036869
~~我要200分~~
⑵ 如何位运算实现数的逆转
#include <stdio.h>
int main()
{
char c = 0x95; //10010101
int i;
char res = 0;
int roundTime = sizeof(c)*8-1;
for(i = roundTime; i >= 0; i--){
if(c & (1<<i)){
res |= 1<<roundTime-i;
}
}
for(i = roundTime; i >= 0; i--){
if(res & (1<<i)){
printf("1");
}else{
printf("0");
}
}
return 0;
}
另外楼主可以将此段代码封装成函数 用C++ 可以写成模板...
⑶ c语言编写程序 :输入一个正整数,将其逆序输出。例如,输入12345,输出54321. 跪求大神用循环语句
#include<stdio.h>
int main()
{
int num;
scanf("%d",&num);
int a,i;
for(i = 0;num > 0;i++)
{
a = num % 10;
printf("%d",a);
num = num/10;
}
return 0;
}
分析:首先,输入的是一个整数,因此最前面一位数不是零,所以我们可以用除10取余法写。
a = num % 10
就是输出数字的最后一位
然后除10剔除数字最后一位,这样数字倒数第二位就会输出。以此类推,就能逆序输出数字。
拓展资料
for循环是编程语言中一种开界的循环语句,而循环语句由循环体及循环的终止条件两部分组成,for循环其在各种编程语言中的实现与表达有所出入,但基本为以C语言和pascal语言代表的两种形式。
C语言中的for循环如下
1.语句最简形式为:
for( ; ; )
2.一般形式为:
for(单次表达式;条件表达式;末尾循环体)
{
中间循环体;
}
⑷ 数组的翻转
printf("%s\n",str[i+1]); 错的,应该是printf("%s\n",str+i+1);
⑸ 怎样用c语言表示 翻转的数 比如把81 翻转为18
用c语言表示翻转的数可以参考下面的代码:
#include <stdio.h>
int main()
{int C,D,S;
scanf("%d",&C);
D=(C%10)*10+C/10;
S=C+D;
printf("S=%d",S);
}
(5)数字反转编译扩展阅读:
scanf()是C语言中的一个输入函数。
与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。
(在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令#include <stdio.h>。)它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。
⑹ NOIP2011年普及组试题哪里有
全国信息学奥林匹克联赛(NOIP2011)复赛普及组
全国信息学奥林匹克联赛(NOIP2011)复赛
普及组
(请选手务必仔细阅读本页内容)
一.题目概况
中文题目名称数字反转统计单词数瑞士轮表达式的值
英文题目与子目录名 reverse stat swiss exp
可执行文件名 reverse stat swiss exp
输入文件名 reverse.in stat.in swiss.in exp.in
输出文件名
reverse.out stat.out swiss.out exp.out
每个测试点时限 1秒 1秒 1秒 1秒
测试点数目 10 10 10 10
每个测试点分值 10 10 10 10
附加样例文件有有有有
结果比较方式全文比较(过滤行末空格及文末回车)
题目类型传统传统传统传统
二.提交源程序文件名
对于
C++语言 reverse.cpp stat.cpp swiss.cpp exp.cpp
对于
C语言 reverse.c stat.c swiss.c exp.c
对于
pascal语言 reverse.pas stat. pas swiss. pas exp.pas
三.编译命令(不包含任何优化开关)
对于
C++语言
g++ -o reverse
reverse.cpp -lm
g++ -o stat
stat.cpp -lm
g++ -o swiss
swiss.cpp -lm
g++ -o exp
exp.cpp -lm
对于
C语言
gcc -o reverse
reverse.c -lm
gcc -o stat
stat.c -lm
gcc -o swiss
swiss.c -lm
gcc -o exp exp.c -lm
对于
pascal语言
fpc reverse.pas fpc stat.pas fpc swiss.pas fpc exp.pas
四.运行内存限制
内存上限
128M 128M 128M 128M
注意事项:
1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数
main()的返回值类型必须是
int,程序正常结束时的返回值必须是
0。
3、全国统一评测时采用的机器配置为:
CPU P4 3.0GHz,内存
1G,上述时限以此配置为准。
4、特别提醒:评测在
NOI Linux下进行。
第 1 页共 5 页
全国信息学奥林匹克联赛(NOIP2011)复赛普及组
1.数字反转
(reverse.cpp/c/pas)
【问题描述】
给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形
式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例
2)。
【输入】
输入文件名为
reverse.in。
输入共
1行,一个整数
N。
【输出】
输出文件名为
reverse.out。
输出共
1行,一个整数,表示反转后的新数。
【输入输出样例
1】
reverse.in reverse.out
123 321
【输入输出样例
2】
Reverse.in reverse.out
-380 -83
【数据范围】
-1,000,000,000 ≤ N ≤
1,000,000,000。
2.统计单词数
(stat.cpp/c/pas)
【问题描述】
一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位
置,有的还能统计出特定单词在文章中出现的次数。
现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章
中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,
即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例
1),
如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例
2)。
【输入】
输入文件名为
stat.in,2行。
第
1行为一个字符串,其中只含字母,表示给定单词;
第
2行为一个字符串,其中只可能包含字母和空格,表示给定的文章。
第 2 页共 5 页
全国信息学奥林匹克联赛(NOIP2011)复赛普及组
【输出】
输出文件名为
stat.out。
只有一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,
分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字
母在文章中的位置,位置从
0开始);如果单词在文章中没有出现,则直接输出一个整数
-1。
【输入输出样例
1】
stat.in stat.out
To
to be or not to be is a question
2 0
【输入输出样例
1说明】
输出结果表示给定的单词
To在文章中出现两次,第一次出现的位置为
0。
【输入输出样例
2】
stat.in stat.out
to
Did the Ottoman Empire lose its power at that time
-1
【输入输出样例
2说明】
表示给定的单词
to在文章中没有出现,输出整数
-1。
【数据范围】
1 ≤单词长度
≤
10。
1 ≤文章长度
≤
1,000,000。
3.瑞士轮
(swiss.cpp/c/pas)
【背景】
在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和
循环赛。前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高。后者的特点是较为公
平,偶然性较低,但比赛过程往往十分冗长。
本题中介绍的瑞士轮赛制,因最早使用于
1895年在瑞士举办的国际象棋比赛而得名。
它可以看作是淘汰赛与循环赛的折衷,既保证了比赛的稳定性,又能使赛程不至于过长。
【问题描述】
2*N名编号为
1~2N的选手共进行
R轮比赛。每轮比赛开始前,以及所有比赛结束后,
都会按照总分从高到低对选手进行一次排名。选手的总分为第一轮开始前的初始分数加上已
参加过的所有比赛的得分和。总分相同的,约定编号较小的选手排名靠前。
每轮比赛的对阵安排与该轮比赛开始前的排名有关:第
1名和第
2名、第
3名和第
4
名、……、第
2K – 1名和第
2K名、……、第
2N – 1名和第
2N名,各进行一场比赛。每
场比赛胜者得
1分,负者得
0分。也就是说除了首轮以外,其它轮比赛的安排均不能事先确
定,而是要取决于选手在之前比赛中的表现。
现给定每个选手的初始分数及其实力值,试计算在
R轮比赛过后,排名第
Q的选手编
第 3 页共 5 页
全国信息学奥林匹克联赛(NOIP2011)复赛普及组
号是多少。我们假设选手的实力值两两不同,且每场比赛中实力值较高的总能获胜。
【输入】
输入文件名为
swiss.in。
输入的第一行是三个正整数
N、R、Q,每两个数之间用一个空格隔开,表示有
2*N名
选手、R轮比赛,以及我们关心的名次
Q。
第二行是
2*N个非负整数
s1, s2, …, s2N,每两个数之间用一个空格隔开,其中
si表示编
号为
i的选手的初始分数。
第三行是
2*N个正整数
w1, w2, …, w2N,每两个数之间用一个空格隔开,其中
wi表示编
号为
i的选手的实力值。
【输出】
输出文件名为
swiss.out。
输出只有一行,包含一个整数,即
R轮比赛结束后,排名第
Q的选手的编号。
【输入输出样例】
swiss.in swiss.out
2 4 2 1
7 6 6 7
10 5 20 15
【输入输出样例说明】
本轮对阵本轮结束后的得分
选手编号 / ①
②
③
④
初始
/ 7 6 6 7
第
1轮
①—④
②—③
7 6 7 8
第
2轮
④—①
③—②
7 6 8 9
第
3轮
④—③
①—②
8 6 9 9
第
4轮
③—④
①—② 9 6 10 9
【数据范围】
对于
30%的数据,
1 ≤
N ≤
100;
对于
50%的数据,
1 ≤
N ≤
10,000;
对于
100%的数据,
1 ≤
N ≤
100,000,1 ≤
R ≤
50,1 ≤
Q ≤
2N,0 ≤
s1, s2, …, s2N ≤
108,1 ≤
w1,
w2, …, w2N ≤
108。
4.表达式的值
(exp.cpp/c/pas)
【问题描述】
对于
1位二进制变量定义两种运算:
第 4 页共 5 页
全国信息学奥林匹克联赛(NOIP2011)复赛
普及组
运算符运算规则
0⊕0=0
⊕
0⊕1=1
1⊕0=1
1⊕1=1
0
×
0=0
×
0
×
1=0
1
×
0=0
1
×
1=1
运算的优先级是:
1.
先计算括号内的,再计算括号外的。
2.
“×”运算优先于“ ⊕”运算,即计算表达式时,先计算×运算,再计算⊕运算。
例如:计算表达式 A⊕B × C时,先计算 B × C,其结果再与 A做⊕运算。
现给定一个未完成的表达式,例如_+(_*_),请你在横线处填入数字 0或者 1,请问
有多少种填法可以使得表达式的值为 0。
【输入】
输入文件名为 exp.in,共 2行。
第 1行为一个整数 L,表示给定的表达式中除去横线外的运算符和括号的个数。
第 2行为一个字符串包含 L个字符,其中只包含 ’(’、’)’、’+’、’*’这 4种字符,其中 ’
(’、’)’是左右括号, ’+’、’*’分别表示前面定义的运算符“ ⊕”和“×”。这行字符按顺序
给出了给定表达式中除去变量外的运算符和括号。
【输出】
输出文件 exp.out共 1行。包含一个整数,即所有的方案数。注意:这个数可能会很大,
请输出方案数对 10007取模后的结果。
【输入输出样例 1】
exp.in exp.out
4
+(*)
3
【输入输出样例说明】
给定的表达式包括横线字符之后为:_+(_*_)
在横线位置填入 (0、0、0)、(0、1、0)、(0、0、1)时,表达式的值均为 0,所以共有 3
种填法。
【数据范围】
对于 20%的数据有 0 ≤
L ≤
10。
对于 50%的数据有 0 ≤
L ≤
1,000。
对于 70%的数据有 0 ≤
L ≤
10,000。
对于 100%的数据有 0 ≤
L ≤
100,000。
对于 50%的数据输入表达式中不含括号。
第 5 页共 5 页
⑺ 用c#编写一个控制台程序 输入一个整数,将各位数字反转输出
string aa=Console.ReadLine();
char[] bb=aa.ToCharArry();
for(int i=bb.length-1;i>=0;i--)
{
Console.Write(bb[i]);
}
纯手写,不知道有错没,没编译没调试
⑻ 用二维指针数组实现矩阵翻转,代码可以编译链接但运行出问题,请各位大神指教(矩阵在主函数中初始化了)
不明白什么叫 矩阵翻转,是指 行不变,列反序,还是指行列交换,还是指 数据 顺序 123456 变 654321。程序 不能正常运行 是因为 单单指针,没有数据存放空间。你需要动态分配存储空间后才能运行。
int **a;
int NR=3,NC=2; // NR--行数,NC--列数
a = (int **) malloc(sizeof(int *) * NR);
for (j=0;j<NR;j++){ a[j] = (int *) malloc(sizeof(int) * NC);
};
接下来你才可以用 a[i][j];
----------
下面做 行不变,列反序:
void reverse(int ** matrix,int m,int n,int f)
{
int matrix1,i,j;
for(i=0;i<n;i++)
for(j=0;j<m/2;j++)
{
matrix1=matrix[i][m-1-j];
matrix[i][m-1-j]=matrix[i][j];
matrix[i][j]=matrix1;
}
}
主函数调用法:
int main()
{
int i,j,k=0;
int **arr;
arr =(int **)malloc(10*sizeof(int*));
for (i=0;i<10;i++) arr[i]=(int *)malloc(10*sizeof(int));
for( i=0;i<3;i++){
for(j=0;j<2;j++)
{ k++; arr[i][j]=k;
}};
reverse(arr,2,3,1);
for( i=0;i<3;i++)
{
for(j=0;j<2;j++) printf("%d ",arr[i][j]);
printf("\n");
}
return 0;
}
⑼ c++数字反转编译错误跪求各位大神帮忙
你的C++数字反转的程序,逻辑上有错误,我帮你改完了,你看看吧
#include<iostream>
using namespace std;
int main()
{
int a[20];
int i=0,n,m=0;
cin>>n;
int sign=n;
if(sign<0)
{
n=-n;
}
while(n)
{
a[i]=n%10;
n=n/10;
i++;
}
for(int k=0;k<i;k++)
{
m=m*10+a[k];
}
if(sign<0)
{
cout<<-m;
}
else
cout<<m;
return 0;
}
运行结果
输入:-1234
输出:-4321
⑽ c语言如何不用strrev函数反转字符串
chara[256];
charb[256];
inti,j,x=0;
scanf("%d",&j);
scanf("%s",a);
while(a[x+1])
x++;//得到字符串的长度
for(i=0;i<j-1;i++)
b[i]=a[i];
for(i=j-1;i<=x;i++)
b[i]=a[x+j-i-1];//应该是x-(i-(j-1)),即x+j-i-1
b[i]='