- 问答
椰程信奥训练中心使用指南
- 2023-10-10 13:32:16 @
本话题旨在解决,各位同学、老师使用训练题库遇到的问题。
8 条评论
-
symo LV 10 MOD @ 2023-11-1 0:07:25已修改
# Python的
a//b
和int(a/b)
的区别整除号:
//
整除运算,结果向负无穷方向去,取最近的整数
浮点数除法:
/
返回float型
使用强制类型转换取整数:
int()
结果向0靠近,取最近的整数
print(13/2) # 6.5 print(13//2) # 6 print(int(6.5)) # 6 print(-13/2) # -6.5 print(-13//2) # -7 print(int(-6.5)) # -6
详见:Python的a//b和int(a/b)的区别 - 知乎
👍 1 -
2023-10-30 10:46:38@
在C++中,setw(int n)用来控制输出间隔。
例如;
cout<<‘s’<<setw(8)<<‘a’<<endl;
则在屏幕显示
s a
//s与a之间有7个空格,加上a就8个位置
setw()只对其后面紧跟的输出产生作用,如上例中,表示’a’共占8个位置,不足的用空格填充。若输入的内容超过setw()设置的长度,则按实际长度输出
setw()默认填充的内容为空格,可以setfill()配合使用设置其他字符填充。
如;
cout<<setfill(’\*’)<<setw(5)<<‘a’<<endl;
则输出:
****a //4个*和字符a共占5个位置。
所谓域宽,就是输出的内容(数值或字符等等)需要占据多少个字符的位置,如果位置有空余则会自动补足。比如我们要设置域宽为2,那么当输出一位数1的时候输出的就是“ 1”,即在1前面加了一个空格。空格和数字1正好一共占用了两个字符的位置。
我 们在设置域宽和填充字符的时候要注意几点:
①设置域宽的时候应该填入整数,设置填充字符的时候应该填入字符。
②我们可以对一个要输出的内容同时设置域宽和 填充字符,但是设置好的属性仅对下一个输出的内容有效,之后的输出要再次设置。即 cout <<setw(2) <<a <<b;语句中域宽设置仅对a有效,对b无效。
③setw和setfill 被称为输出控制符,是与流出符<<连用的设置方式,使用时要包含另一个头文件
iomanip
cout<<setfill(' ')<<setw(n)<<" "
输出n个空格。 -
2023-10-28 18:23:57@
python 数据类型
-
2023-10-24 16:14:24@
python
print()
函数常用方法1. print()函数用法:
函数语法:
print(*objects, sep=' ', end='\n', file=sys.stdout)
objects – 复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。
sep – 用来间隔多个对象,默认值是一个空格。
end – 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。
file – 要写入的文件对象。
2.格式化输出:
在C语言中,我们可以使用
printf("%-.4f",a)
之类的形式,实现数据的的格式化输出。在python中,我们同样可以实现数据的格式化输出。
s = 'Symo Chan' x = len(s) print('The length of %s is %d' % (s,x)) # 和C语言的区别在于,Python中格式控制符和转换说明符用%分隔,C语言中用逗号。
设置宽度与精度:
PI = 3.141592653 print('%10.3f' % PI) #字段宽10,精度3 # 输出: 3.142 #精度为3,所以只显示142,指定宽度为10,所以在左边需要补充5个空格,以达到10位的宽度
转换标志:
-表示左对齐;+表示在数值前要加上正负号;
" "(空白字符)表示正数之前保留空格();0表示转换值若位数不够则用0填充。
PI = 3.1415926 print('%-10.3f' % PI) #左对齐,还是10个字符,但空格显示在右边。 # 3.142
PI = 3.1415926 print('%+f' % PI) #显示正负号 #+3.141593 # 类型f的默认精度为6位小数。
PI = 3.1415926 print('%010.3f' % PI) #字段宽度为10,精度为3,不足处用0填充空白 # 000003.142 0表示转换值若位数不够则用0填充
3.Python常用格式字符:
%s 字符串采用str()的显示 %x 十六进制整数
%r 字符串(repr())的显示 %e 指数(基底写e)
%c 单个字符 %E 指数(基底写E)
%b 二进制整数 %f,%F 浮点数
%d 十进制整数 %g 指数(e)或浮点数(根据显示长度)
%i 十进制整数 %G 指数(E)或浮点数(根据显示长度)
%o 八进制整数 %% 字符%
4. 输出列表元素
l = [1,2,3,4] for i in l: print(i) # 一行一个,自动换行
l = [1,2,3,4] for i in l: print(i,end=' ') # 以空格为分隔符,不换行,但是最后有空格
l = [1,2,3,4] print(" ".join(str(i) for i in l)) # 以空格为分隔符,最后无空格
for x in list: print(x, end=' ' if x != list[-1] else '') # 判断该元素是不是列表的最后一个元素,根据判断结果输出分隔符
a = list() print(*a,sep=' ') # 一行输出列表
5. join()函数:
将一个包含多个字符串的可迭代对象,转为用分隔符s连接的字符(不能是数字)
a = ["he", "l", "l", "o"] print(" ".join(a)) # 输出:he l l o # 注意最后没有空格
6. fomat()函数:
1.通过位置来填充字符串
print('hello {0} i am {1}'.format('world','python')) # 输入结果:hello world i am python print('hello {} i am {}'.format('world','python') ) # 输入结果:hello world i am python print('hello {0} i am {1} . a now language-- {1}'.format('world','python') # 输出结果:hello world i am python . a now language-- python
foramt会把参数按位置顺序来填充到字符串中,第一个参数是0,然后1 ……
也可以不输入数字,这样也会按顺序来填充 同一个参数可以填充多次,这个是format比%先进的地方2.通过key来填充
obj = 'world' name = 'python' print('hello, {obj} ,i am {name}'.format(obj = obj,name = name)) # 输入结果:hello, world ,i am python
3.通过列表填充
list=['world','python'] print('hello {names[0]} i am {names[1]}'.format(names=list)) # 输出结果:hello world i am python print('hello {0[0]} i am {0[1]}'.format(list)) # 输出结果:hello world i am python
4.通过字典填充
dict={‘obj’:’world’,’name’:’python’} print(‘hello {names[obj]} i am {names[name]}’.format(names=dict)) # hello world i am python # 注意访问字典的key,不用引号的
5.通过类的属性填充
class Names(): obj='world' name='python' print('hello {names.obj} i am {names.name}'.format(names=Names)) # 输入结果hello world i am python
-
2023-10-24 0:01:46@
python如何实现一行输入多个值呢?
例如 读入两个数10 22到a b 中。
很简单
a,b = input().split()
即可。当然,a,b中保存的是字符串。
如果要求a,b中保存的是整数的话可以这样写
a,b = map(int,input().split())
补充: 这里头
input()
输入的是str '10 22'
,通过split()将一个str分割成包涵两个str的列表['10','22']
,而如果再套map(int, )
就是将列表中每个元素执行int(),也就是类型转换。 -
2023-10-14 0:02:01@
Q: cin/cout为什么会超时(TLE)?
A: cin/cout因为默认同步stdin/stdout而变慢,并产生更多的系统调用而受到性能影响,可以在main函数开头加入下面代码加速:
ios::sync_with_stdio(false); cin.tie(0);
* 另外,请使用'\n'而不是 endl ,因为endl默认会增加刷新操作,而导致输出缓冲失效,降低效率。
Q: gets函数没有了吗?
A: gets函数因为不能限制输入的长度,造成了历史上大量的缓冲区溢出漏洞,因此在最新版本中被彻底删除了,请使用fgets这个函数取代。 或者使用下面的宏定义来取代:
#define gets(S) fgets(S,sizeof(S),stdin)
-
2023-10-12 16:50:16@
现在你所使用的评测系统也仅仅是一个程序,并没有人工智能。 因此很多地方需要你来迁就它,如果不这样做,你的答案即使本质上是正确的,由于形式的错误造成系统不能理解,也会导致错误。 系统运行过程如下:
- 教师在系统中添加题目,并严格定义题目提供输入数据的格式和要求的输出数据格式。
- 教师根据题目定义的格式向系统中添加若干组测试数据,每组数据都包含输入数据和对应的输出。 学生阅读题目,并根据自己的理解提交程序。
- 系统编译并运行学生的程序,再将老师事先提供的输入数据“喂”给学生的程序,看它会输出什么。 如果学生程序的输出与老师之前提供的输出完全一致,一字不差,则认为学生的程序是正确的,否则则认为该程序错误。
如果运行过程中出现内存、时间上超出题目限制的情况,则中断程序的运行,并认为答案不正确。
在了解了上面的情况以后,同学们应该理解,如果题目没有要求程序输出“Please Input Two Number”之类的提示信息,那么自行输出这些文字将导致你的程序输出与老师事先告诉系统的输出不能做到“一字不差”,因而将导致系统报答案错误。 如果题目要求每两行输出之间要空一行,结果你没有空,会是格式错误,反之亦然。
也许你会觉得,哦,这系统太烂了,这点东西都不能自动识别;实际上正是这样才能有效训练大家编程的精确性、养成良好的代码习惯。很多程序高手都跟你一样,是从对这个系统吐槽开始学习如何认真仔细的、一丝不苟的进行编程的。
系统为了能用统一的方式运行所有同学的答案,不得不对所有人提交的答案的形式进行限定。 对于学习C、C++语言的同学来说,所有提交给系统的答案必须包含并且只有一个main函数,这个main函数必须返回int类型,并且最好返回0,因为操作系统对非零的返回值认为是运行出错。
编译错误发生时,点击“编译错误”的文字链接可以得到详细解释。
-
2023-10-10 13:33:05@
- 1