关于输入多组测试数据,C#

最近在学习C#,所以问题来了。
在很多ACM问题中,都会有一句输入多组测试数据,以文件结尾。
用C或者C++都是可以以关键字EOF实现。
我想问,如果用C#去实现这一个功能,代码怎样才能更简单、快捷?

6个回答

StreamReader类:
Read方法,到达尾端没有字符可以读到时,返回0.
Peek方法,如果没有字符可以读取,返回-1.
ReadLine方法,到达尾端时,返回null.
ReadBlock方法,到达尾端,没有字符可以再读时,返回0.
ReadToEnd方法,一次读完。
这几种方法没有太大的区别,就是级别越来越高而已。

用 TextReader.ReadLine(),返回 null 就是文件结束。

EOF = End Of File,文件结束标志。
C#中直接判断文件是否结束就可以了,用不着EOF。
EOF是C中的一个宏。

问题已解决,使用StreamWriter和StreamReader分别对文件或者txt进行输入或读取。

我以前在学校的时候也参加过ACM程序设计大赛,不过也只限于校级,市级或者往上就不支持C#语言了,真可惜。
ACM问题,通常都是使用控制台程序来实现的。你可以通过Console.ReadLine()来直接读取一行,比如两个数字用空格隔开的话,你可以string.Split(' '),以空格来拆分,存到一个stirng数组中。
最终输入你可以是二维字符串数组,也可以是一维字符串数组(用的时候再以空格拆分开)。
我都是这样处理的,可能仁者见仁智者见智,别人可能会有别的好一点的办法吧。

我以前在学校的时候也参加过ACM程序设计大赛,不过也只限于校级,市级或者往上就不支持C#语言了,真可惜。
ACM问题,通常都是使用控制台程序来实现的。你可以通过Console.ReadLine()来直接读取一行,比如两个数字用空格隔开的话,你可以string.Split(' '),以空格来拆分,存到一个stirng数组中。
最终输入你可以是二维字符串数组,也可以是一维字符串数组(用的时候再以空格拆分开)。
我都是这样处理的,可能仁者见仁智者见智,别人可能会有别的好一点的办法吧。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c#中快速从3个DataTable中分别提取一个数据进行相加,获得我想要的值
【背景】:有三个DataTable,每个DataTable大约1.5万条数据。 【我的需求描述】:封装一个方法,参数1是我需要的值,参数2是偏差值,参数3、4、5分别是3个DataTable,参数6是一个允许的匹配次数(当然,有好的办法的话,这个参数可以不要),我的意思必须要很快的从3个DataTable中各抽出一行中的一列(也就是分别从3个DataTable中提取一个数),进行相加,3个数加得的总和应该在参数1的值减去偏差值到参数1的值加上偏差值这个范围内,并且我需要快速得到数据,比如2秒内,求最好的解决办法......(提醒:我要的是很快可以得到结果的办法,不是1分钟才能得到结果) 【再次累赘的说一下想完成的功能】:就是说:用户输入一个想得到的值(比如2500),然后用户输入一个允许的偏差值(比如500,正负偏差都可以就是说高于500以内或低于500以内都可以,当然,偏差值是0也可以),3个容器(DataTable或数组或集合都行,这里是由系统提供的固定数据),最终需要使用大家的方法而得到的索引分别代入3个容器中,以便从3个容器中分别取一个值出来,进行相加,使得加数属于该用户想得到的值(此时应在2000-3000范围内,含临界值)即可。 【我的其他要求】:必须是匹配速度非常快(最慢1-2秒)、准确、代码合理。如果用户每次都输入2500的需求值和500的偏差值,最终你们提供的方法所获得的索引不应该每次都一样,当然如果有特殊情况下只能匹配出一个的话是列外的,因为以现有的值来看,一般偏差值不是0的话,按道理是可以匹配出很多条的,但是,只要找到一个匹配,即可以直接返回了。方式不需要有多大的通用性,只要能满足该需求即可. [点击这里下载测试项目,写好了的,有数据直接可以测试][1] <-----■■■■■■■■■ 【一些提示】:有人反映说我的数据有重复,其实告诉你们,里面有45041条,是没有重复的,只是weight有重复而已,我给你们的数据库删除了很多列,其他列是没有重复的。 【想封装的方法如下】: /// <summary> /// 获取自动匹配 /// </summary> /// <param name="needValue">需要的值</param> /// <param name="deviationValue">允许的偏差值(正负)</param> /// <param name="dtFirst">第一个数据容器:DataTable</param> /// <param name="dtSecond">第二个数据容器:DataTable</param> /// <param name="dtThird">第三个数据容器:DataTable</param> /// <param name="reMatchCount">允许的匹配次数,如果有更好的办法,该参数可以取消掉</param> /// <returns>获得的结果,比如:三个DataTable的索引</returns> public object GetAutoMatch(double needValue, double deviationValue, DataTable dtFirst, DataTable dtSecond, DataTable dtThird, int reMatchCount) { //我们假设此时传来的参数值是: needValue=2500; deviationValue=500; dtFirst=第1个DataTable;//(是固定数据,当然,这里你理解成一个数组也行) dtSecond=第2个DataTable;//(是固定数据,当然,这里你理解成一个数组也行) dtThird=第3个DataTable;//(是固定数据,当然,这里你理解成一个数组也行) reMatchCount=99999;//暂时没用上,如果采用循环方式,可以考虑用上此参数 //只要大家在三个DataTable中分别抽出一个数(也就是说任意三个索引) //加起来的值是我想要的,就匹配成功了 int firstIndex = 0;//这里是关键,就是让大家帮我得到一个firstIndex int secondIndex = 0;//这里是关键,就是让大家帮我得到一个secondIndex int thirdIndex = 0;//这里是关键,就是让大家帮我得到一个thirdIndex //问题就在这里,我需要大家想个办法出来,能在1秒钟内得到3个索引值,最重要的是,把索引值代入后面的if判断必须要满足条件,因为我事先分别知道3个DataTable的最大值和最小值,而且我限制了needValue、deviationValue了,按照我的限制规则加上你们得到的3个索引,匹配的结果是绝对能匹配成功的,如果匹配不出,那么代表你们帮我获取的3个索引值根本不正确。 //按照以上传参的值,如果sum在2000-3000范围,就算匹配成功 double sum = Convert.ToDouble(dtFirst.Rows[firstIndex]["Weight"]) + Convert.ToDouble(dtSecond.Rows[secondIndex]["Weight"]) + Convert.ToDouble(dtThird.Rows[thirdIndex]["Weight"]); //如果找到任意一组匹配的项,就可以return了。 if (sum == needValue //|| sum == needValue - deviationValue//这个不需要,因为后面是<= //|| needValue == sum - deviationValue//这个不需要,因为后面是<= ||sum - needValue <= deviationValue || Math.Abs(needValue - sum) <= deviationValue) { return firstIndex+"|"+secondIndex+"|"+thirdIndex+"#"+sum; } return "-1|-1|-1#0"; //建议大家看完后,给点评论什么的,说下您的建议。 //感谢大家的帮助....................... //手写的代码,有点累,而且有些内容多处累赘了,不好意思... } [1]: http://www.i9kv.com/down/MatchNumber.rar
c#调联迪MisPos.dll的问题
之前没用过C#,目前也是边学边开发,网上关于联迪读卡器、Pos的资料少之又少,研究了好几天还是没有调通,希望有调过联迪dll的大神指点一下! 1、dll函数说明: int __stdcall BankTrans(char * InputData, char* OutPutData) ``` 输入参数InputData: typedef struct { char trans[2]; /*交易类型:( '10'-获取卡号 '00'-签到 '01'-消费 '02'-消费撤销 '03'- 隔日退货 '04'-查询 '05-重打印 '06-结算 '07'-批量退货 )*/ char CardType[2]; /*卡类型*/ char amount[12]; /* 金额(12字节,无小数点,左补0,单位:分)*/ char card_no[20]; /*卡号 (20字节,左对齐,不足部分补空格)*/ char old_reference[12]; /*原交易参考号*/ char old_trace[6]; /*原交易流水号*/ char UserNO[15]; /*原交易商户号*/ char TerNO[15]; /*原交易终端号*/ char Date[8]; /*原交易日期yyyymmdd*/ char VerifyInfo[300]; // 认证数据 } InputData; 输出 OutPutData,结构体如下 typedef struct { char resp_code[2];/*0~1位 返回码 ( 2字节, "00"成功)*/ char card_no[20];/*卡号 (20字节,左对齐,不足部分补空格)*/ char amount[12];/* 金额(12字节,无小数点,左补0,单位:分)*/ char reference[12]; /*交易参考号*/ char trace[6]; /*流水号 (6字节,左对齐)*/ char UserNO[15]; /*商户号*/ char TerNO[15]; /*终端号*/ char CardType[2]; /*卡类型*/ char expr[4];/*有效期 (4字节) */ char BatchNo[10];/*批次号*/ char Date[8]; /*交易日期yyyymmdd*/ char Time[6]; /*交易时间hhmmss*/ char CardName[20]; /*发卡行中文名*/ char old_amount[12];/* 原交易金额(12字节,无小数点,左补0,单位:分)*/ char old_reference[12]; /*原交易参考号 */ char old_trace[6]; /*原交易流水号*/ char old_UserNO[15]; /*原交易商户号*/ char old_TerNO[15]; /*原交易终端号*/ char old_Date[8]; /*原交易日期yyyymmdd*/ char resp_chin[100];/*86~185位 错误说明(40字节,左对齐,不足部分补空格)*/ } OutPutData; ``` ![图片说明](https://img-ask.csdn.net/upload/201906/15/1560567452_188967.png) 2、我在c#里引用dll方法里是这么定义的 ``` [DllImport("MisPos.dll", CallingConvention = CallingConvention.StdCall)] public static extern int BankTrans(INPUT_MIS request, StringBuilder response); [StructLayout(LayoutKind.Sequential)] public struct INPUT_MIS { /*交易类型:('10'-获取卡号 '00'-签到 '01'-消费 '02'-消费撤销 '03'- 隔日退货 '04'-查询 '05-重打印 '06-结算 '07'-批量退货 )*/ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)] public string trans; } [StructLayout(LayoutKind.Sequential)] public struct OUTPUT_MIS { /*0~1位 返回码 ( 2字节, "00"成功)*/ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)] //这里的2就是数组长度 public string resp_code; /*卡号 (20字节,左对齐,不足部分补空格)*/ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)] public string card_no; /*卡类型*/ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)] public string CardType; /*错误说明*/ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)] public string resp_chin; } ``` 输入输出类型定义为 结构体、StringBuilder还是 IntPtr ?? 我都试了一遍 3、具体调用: ``` INPUT_MIS input = new INPUT_MIS(); StringBuilder output = new StringBuilder(2000); input.trans = "10"; //调用 int result = LDE820D.LDE820D.BankTrans(input, output); MessageBox.Show("result:" + result + "----" + output); ``` 4、返回结果为: ![图片说明](https://img-ask.csdn.net/upload/201906/15/1560567800_996204.png) 5、联迪设备是串口设备,测试demo需要根据自己电脑设备管理器修改串口号,这种设备是可以直接调dll还是通过打开串口那种模式开发。 像神思的设备直接调dll就可以驱动读卡器读卡,扫码墩切成串口模式就需要通过打开串口来接收数据,联迪的这种应该怎么弄呢????
c语言多组数据测试问题?(O_O)
在下编程大门的新手一枚,遇到了这样一道题:2016年,小豪喜欢数字6,于是一个数的某一位有数字6他都喜欢(比如2016个位是6,所以小豪喜欢2016这个数),但是小豪讨厌9(因为9的颜值太低),任意一个数,只要某个数字是9他都不喜欢(就算这个数有6,比如6699这个数就是小豪不喜欢的)。那么问题来了,现在给一个a,b,求a到b之间有多少个数是小豪喜欢的。 先输入一个T表示测试数据组数(T<=50) 每组数据输入a,b(0<a<=b<1000000) 输出小豪喜欢数的个数。 代码如下: #include<stdio.h> void main() { long a,b,s,i; int n,k=0,j,t,m; while(scanf("%d",&n)==1) { s=0; scanf("%ld%ld",&a,&b); for(i=a;i<=b;i++) { t=i;j=0; while(t) { m=t%10; t=t/10; if(m==6)j=1; if(m==9) { j=0; break; } } s+=j; } printf("%ld\n",s); k++; if(k>=n)break; } } 经过多次测试,发现第二组数据就开始出了问题,猜测应该是初始化的问题,可是经过小白2天时间的思考,并没有什么问题(O_O)。这样的问题已经积累了好几道题了。实在是无能为力了,希望在这里找到大神指点迷津让我开窍。谢谢![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/63.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/63.gif)
关于若干个字符串排序问题,如何同时测试多组数据。
#include<stdio.h> //定义输入输出 #include<stdlib.h> //定义杂项函数和内存分配函数 #include<string.h> //定义字符串处理 int main() { char str[100][50]; char source[100];char b[50]; gets(source);//输入n个名字 //printf("%s\n",source); // printf("%d\n",strlen(source)); { int nCount=0; int i=0, col=0; for (i=0; i<strlen(source); i++ ) //按一个一个字符来算 ,包括空格 { if (source[i] != ' ' ) str[nCount][col++] = source[i];//一个单词还没有结束,所以nCount不变 // printf("nCount=%d\n",nCount); else if ( col ) //已经统计完前面的单词了 { str[nCount][col] ='\0';// nCount++; col = 0;//继续空出来 } } if ( col ) str[nCount++][col] = '\0';// for ( i=0; i<nCount; i++) //printf("%s ", str[i]); // 下面就排序吧 for(i=0;i<nCount;i++) for(int j=0;j<nCount-1-i;j++) { if(strcmp(str[j],str[j+1])>0) { strcpy(b,str[j+1]); strcpy(str[j+1],str[j]); strcpy(str[j],b); } } printf("%s",str[0]); for(int k=1;k<nCount;k++) {printf(" %s",str[k]);} printf("\n"); } return 0; } ``` ```
第m小的方案,它的比赛难度是多少
Problem Description   最近,小明出了一些ACM编程题,决定在HDOJ举行一场公开赛。   假设题目的数量一共是n道,这些题目的难度被评级为一个不超过1000的非负整数,并且一场比赛至少需要一个题,而这场比赛的难度,就是所有题目的难度之和,同时,我们认为一场比赛与本场题目的顺序无关,而且题目也不会重复。   显而易见,很容易得到如下信息:   假设比赛只用1个题目,有n种方案;   假设比赛使用2个题目,有(n-1)*n/2种方案;   假设比赛使用3个题目,有(n-2)*(n-1)*n/6种方案;   ............   假设比赛使用全部的n个题目,此时方案只有1种。      经过简单估算,小明发现总方案数几乎是一个天文数字!   为了简化问题,现在小明只想知道在所有的方案里面第m小的方案,它的比赛难度是多少呢? Input 输入数据的第一行为一个整数T(1 <= T <= 20),表示有T组测试数据。 每组测试数据第一行为两个整数n, m(0 < n, m <= 10000),表示现在有n个题目,现在要求第m小的方案的比赛难度。接下来第二行有n个数字,分别表示这n个题目的难度值。 Output 对于每组测试数据,输出一行"Case #c: ans"(不包含引号),ans 表示要求的第m小的比赛难度,输入数据保证存在第m小的方案,具体参见样例。 Sample Input 2 5 6 1 1 1 1 1 5 25 1 2 3 4 5 Sample Output Case #1: 2 Case #2: 11
棋盘问题 用C语言
Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。 Input 输入含有多组测试数据。 每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n 当为-1 -1时表示输入结束。 随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。 Output 对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C<2^31)。 Sample Input 2 1 #. .# 4 4 ...# ..#. .#.. #... -1 -1 Sample Output 2 1
我的代码哪里错了-_-||为什么总有一组数据输出错误?
编制具有如下原型的函数findLast: ``` char*findLast(char*sourceStr,char*subStr); ``` findLast函数则要返回源串sourceStr中最后一次出现subStr子字符串的头字符位置。 而后编制主函数,输入两个字符串,将它们用作实参来调用这两个函数,如果返回NULL输出-1,否则输出子字符串出现时头字符在原字符串的下标,每个结果占一行。 要求实现程序中不可使用“string.h”头文件内有关寻找子串的标准库函数。 ``` 【输入形式】输入源串sourceStr,子字符串subStr。 【输出形式】子字符串subStr最后一次在源串sourceStr中出现的位置 【样例输入】 welcometochinauniversityofminingandtechnology in 【样例输出】29 ``` ``` #include<iostream> using namespace std; char*findLast(char*,char*); int main() { char*a; char sourcestr[100]; char substr[10]; cin.getline(sourcestr,100); cin.getline(substr,10); a=findLast(sourcestr,substr); if(a==NULL) cout<<-1; else cout<<a-sourcestr; return 0; } char*findLast(char*sourcestr,char*substr) { int i=0,j=0,len1=0,len2=0,k=0,x=0; char*p1=sourcestr; char*p2=substr; while(sourcestr[i]!='\0') { len1++; i++; } i=0; while(substr[i]!='\0') { len2++; i++; } if(len1<len2) return NULL; else { for(i=0;i<len1;i++) {if(*(p1+i)==*(p2+j)) {j++; x=j; } else { j=0; if(*p2==*(p1+i-x+1)) j++; i=i-x+1; } if(j==len2) { k=i; j=0; } } } if(k) {for(i=0;i<k-len2+1;i++) p1++; return p1; } else return NULL; } ``` 共有测试数据:5 平均占用内存:3.087K 平均CPU时间:0.80000S 平均墙钟时间:0.80854S 测试数据 评判结果 测试数据1 运行时间过长 测试数据2 输出错误 测试数据3 完全正确 测试数据4 运行时间过长 测试数据5 完全正确
用c++实现求素数的和时遇到一个问题
描述 现在给你N个数(0<N<1000),现在要求你写出一个程序,找出这N个数中的所有素数,并求和。 输入 第一行给出整数M(0<M<10)代表多少组测试数据 每组测试数据第一行给你N,代表该组测试数据的数量。 接下来的N个数为要测试的数据,每个数小于1000 输出 每组测试数据结果占一行,输出给出的测试数据的所有素数和 代码: #include<iostream> using namespace std; int main() { int M; int flag=1; cin>>M; while(M--){ int N,i; int sum=0; cin>>N; while(N--){ cin>>i; for(unsigned cnt=2;cnt<i/2+1;cnt++){ if(i%cnt==0){ flag=0; break; } } if(!flag==0){ sum+=i; flag=1; } } cout<<sum<<endl; } system("Pause"); return 0; } N代表有多少组测试数据;M代表每组有多少个数据;i代表具体数据 接下来是我遇到的问题: 当我输入的都是素数时能正确求出素数和,但是如果中间有一个合数,那么这个合数后面的素数就没有算进去了,不知道为什么。 麻烦大家帮我找一下原因。
棋盘问题 如何用C语言
Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。 Input 输入含有多组测试数据。 每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n 当为-1 -1时表示输入结束。 随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。 Output 对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C<2^31)。 Sample Input 2 1 #. .# 4 4 ...# ..#. .#.. #... -1 -1 Sample Output 2 1
紧急求助,为什么只能输出一组数据?
/*Q4609.(10分)建立学生成绩管理系统,对学生以下信息: 学号、名字、成绩(语文、数学、外语) 进行管理。要 求利用结构体变量记录每名学生的学号、名字、成绩(语文、数学、外语),并建立单向链表来存放学生的信息。 功能实现要求如下: (1)写函数Append ()实现使用单链表来添加学生的信息。√ (2)写函数DisLink()输出所有学生的信息。 √ (3)写函数Sort()对学生成绩进行排序。 (4)写DeleteMemory()函数释放链表所占内存空间 √ 其中结构体类型定义如下: struct stu { char ID[12];//学号 char name[20];//姓名 int c1;//语文成绩 int c2;//数学成绩 int c3;//英语成绩 struct stu * next; } 测试用例如下: 1 增加数据 2 退出 选择:1 请输入学号:001 请输入名字:张三 请依次输入语文,数学外语成绩:88 89 90 1 增加数据 2 退出 选择:1 请输入学号:0*/ #include<stdio.h> #include<stdlib.h> struct stu { char ID[12];//学号 char name[20];//姓名 int c1;//语文成绩 int c2;//数学成绩 int c3;//英语成绩 struct stu * next; }; struct stu*Append() { struct stu*pHead=NULL,*pNew=NULL,*pTail=NULL; pNew=(struct stu*)malloc(sizeof(struct stu));//给一个stu分配空间! int i=0; int a; printf("1 增加数据\n"); printf("2 退出\n"); printf("选择"); scanf("%d",&a); for(i=0;i<100;i++) { if(a==1) { printf("请输入学号:"); scanf("%s",&pNew->ID); printf("请输入名字:"); scanf("%s",&pNew->name); printf("请依次输入语文,数学,外语成绩:"); scanf("%d%d%d",&pNew->c1,&pNew->c2,&pNew->c3); if(pHead==NULL) pHead=pNew; else pTail->next=pNew; pTail=pNew; pNew->next=NULL; printf("1 增加数据\n"); printf("2 退出\n"); printf("选择"); scanf("%d",&a); getchar(); //吞掉回车,不然的话回车会进入gets.gets直接结束 } else break; } return pHead; } void DisLink(struct stu *pHead) { struct stu*p=pHead; int n=1; printf("序号\t学号\t名字 \t语文\t数学\t外语\t总分\n"); while(p!=NULL) { int sum=p->c1+p->c2+p->c3; printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n",n,p->ID,p->name,p->c1,p->c2,p->c3,sum); p=p->next; n++; } } void Sort(struct stu*pHead) { int n=0; struct stu *p,*q,*t; p=pHead; while(p!=NULL) { p->next=q; if((p->c1+p->c2+p->c3)>(q->c1+q->c2+q->c3)) { t=p,p=q,q=p; } p=p->next; } printf("排序后\n"); printf("序号\t学号\t名字 \t语文\t数学\t外语\t总分\n"); while(p!=NULL) { printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n",n,p->ID,p->name,p->c1,p->c2,p->c3,p->c1+p->c2+p->c3); p=p->next; n++; } } void DeleteMemory(struct stu* pHead) { struct stu *p; while (NULL != pHead) { p = pHead; pHead = pHead->next; free(p); // 下一个节点 free(Pointer); } } int main() { struct stu *p; p=Append(); DisLink(p); Sort(p); DeleteMemory(p); return 0; }
PTA|L2-022 链表重排 求大佬点波拨一下哪里错了
给定一个单链表 L1 ​​ →L ​2 ​​ →⋯→L ​n−1 ​​ →L ​n ​​ ,请编写程序将链表重新排列为 L ​n ​​ →L ​1 ​​ →L ​n−1 ​​ →L ​2 ​​ →⋯。例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2→4→3。 输入格式: 每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址和结点总个数,即正整数N (≤10 ​5 ​​ )。结点的地址是5位非负整数,NULL地址用−1表示。 接下来有N行,每行格式为: Address Data Next 其中Address是结点地址;Data是该结点保存的数据,为不超过10 ​5 ​​ 的正整数;Next是下一结点的地址。题目保证给出的链表上至少有两个结点。 输出格式: 对每个测试用例,顺序输出重排后的结果链表,其上每个结点占一行,格式与输入相同。 输入样例: 00100 6 00000 4 99999 00100 1 12309 68237 6 -1 33218 3 00000 99999 5 68237 12309 2 33218 输出样例: 68237 6 00100 00100 1 99999 99999 5 12309 12309 2 00000 00000 4 33218 33218 3 -1 结果如下 ![图片说明](https://img-ask.csdn.net/upload/202002/17/1581940136_268564.jpg) ``` #include <iostream> #include <cstring> using namespace std; const int maxn=1e5; int _data[maxn]; int _next[maxn]; int main(){ int add,n; cin>>add>>n; memset(_next, -1, sizeof(_next)); for(int i=1;i<=n;i++){ int id,data,next; cin>>id>>data>>next; _data[id]=data; _next[id]=next; } int flag=1; int rank[n+1];//第四组测试用例会越界,但改大是答案错误 for(int i=add;i!=-1;i=_next[i]){ rank[flag++]=i; } if(n%2!=0&&n>=3){ int temp=(n-1)/2; for(int i=1;i<=temp;i++){ printf("%05d %d %05d\n",rank[n-i+1],_data[rank[n-i+1]],rank[i]); printf("%05d %d %05d\n",rank[i],_data[rank[i]],rank[n-i]); } temp=(n+1)/2; printf("%05d %d %d",rank[temp],_data[rank[temp]],-1); } else if(n==1){ printf("%05d %d %d",rank[1],_data[rank[1]],-1); } else if(n==2){ printf("%05d %d %05d\n",rank[2],_data[rank[2]],rank[1]); printf("%05d %d %d",rank[1],_data[rank[1]],-1); } else { int temp=n/2; for(int i=1;i<temp;i++){ printf("%05d %d %05d\n",rank[n-i+1],_data[rank[n-i+1]],rank[i]); printf("%05d %d %05d\n",rank[i],_data[rank[i]],rank[n-i]); } printf("%05d %d %05d\n",rank[temp+1],_data[rank[temp+1]],rank[temp]); printf("%05d %d %d",rank[temp],_data[rank[temp]],-1); } } ``` ``` ```
PAT 甲级 代码 只通过4分
题目大意 假如A和B有通话,就称他们是有关系的。并且A和B之间的权值就是他们通话的时间。一个匪帮被假定为有两个人以上,以及他们之间的权值之和(也就是通话时间之和)超过一个给定的阈值K。在每个匪帮中首领被定义为权值最大的人。现在你需要找出匪帮以及其首领。 显然这是道图的问题。匪帮的个数也就是图的连通分量,可以先用DFS求出图的连通分量,判断各个连通分量的顶点个数是否超过2以及权值之和是否超过阈值K ``` #include <iostream> #include <stack> #include <queue> using namespace std; struct node { int c; //表示结点的字符值 int w; //表示权重 }; struct out1 { // 用于输出, char c1; //记录输出的那个字符 int num; //记录输出的每个组的成员个数 friend bool operator < (out1 o1, out1 o2) { return o1.c1 > o2.c1; //ASCII码大的排在后面。即按照字母序排序。 } }; priority_queue<out1>pq1; int main() { int N = 0; //N组数据 int K = 0; //门限值为K cin >> N >> K; if (N < 0 || N>1000) { return -1; } if (K < 0 || K>1000) { return -1; } int Gra[26] = {0}; //记录每个点的权重 bool flag2[26] = { false }; int flag1[26][26] = { 0 };//表示这两个点之间有边,无向图。 //输入数据,更新相应的数组信息。 for (int i = 0; i < N; i++) { string s1, s2; cin >> s1; cin >> s2; int w1; cin >> w1; Gra[((int)s1[0]) - 65] = Gra[((int)s1[0]) - 65] + w1; //记录每个点的权重 Gra[((int)s2[0]) - 65] = Gra[((int)s2[0]) - 65] + w1; flag1[((int)s1[0]) - 65][((int)s2[0]) - 65] = flag1[((int)s1[0]) - 65][((int)s2[0]) - 65] + w1; //表示这两个点之间的边,无向图。 flag1[((int)s2[0]) - 65][((int)s1[0]) - 65] = flag1[((int)s1[0]) - 65][((int)s2[0]) - 65]; } //接下来是DFS stack<node>s3; for (int i4 = 0; i4 < 26; i4++) { node t; int total = 0;//记录总的权值。 int max2 = 0; //记录点权最大的值 int max1 = 0;//记录最大点权的下标。 for (int i = 0; i < 26; i++) { if (Gra[i] > 0 && !flag2[i]) { t.c = i; t.w = Gra[i]; s3.push(t); flag2[i] = true; max2 = Gra[i]; max1 = i; break; } } //找到第一个字符,开始。 if (s3.empty()) { break; } //如果每个元素都已经处理了一遍了。直接返回。 int k3 = 1; //表示个数 while (!s3.empty()) { node t1 = s3.top(); int i1 = 0; for (; i1 < 26; i1++) { if (flag1[t1.c][i1]) { node t2; t2.c = i1; t2.w = Gra[i1]; total = total + flag1[t1.c][i1]; s3.push(t2); if (Gra[i1] > max2) { max2 = Gra[i1]; max1 = i1; } if (!flag2[i1]) { k3++; flag2[i1] = true; } flag1[t1.c][i1] = flag1[i1][t1.c] = 0; break;} } if (i1 == 26) { s3.pop(); } } if (k3> 2 && total>K ) { out1 out; out.num = k3; out.c1 = (char)(max1 + 65); pq1.push(out); } } int k2 = pq1.size(); if (k2 > 0) { cout << k2<<endl; while (!pq1.empty()) { cout << pq1.top().c1 << pq1.top().c1 << pq1.top().c1 << " " << pq1.top().num <<endl; pq1.pop(); } } else { cout << 0; } return 0; } ``` 只通过两个测试点,郁闷。
解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案
Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。 Input 输入含有多组测试数据。 每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n 当为-1 -1时表示输入结束。 随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。 Output 对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C<2^31)。 Sample Input 2 1 #. .# 4 4 ...# ..#. .#.. #... -1 -1 Sample Output 2 1
求助,请问输出函数有什么问题吗?为什么只能输出第二组数据?
/*Q4609.(10分)建立学生成绩管理系统,对学生以下信息: 学号、名字、成绩(语文、数学、外语) 进行管理。要 求利用结构体变量记录每名学生的学号、名字、成绩(语文、数学、外语),并建立单向链表来存放学生的信息。 功能实现要求如下: (1)写函数Append ()实现使用单链表来添加学生的信息。√ (2)写函数DisLink()输出所有学生的信息。 √ (3)写函数Sort()对学生成绩进行排序。 (4)写DeleteMemory()函数释放链表所占内存空间 √ 其中结构体类型定义如下: struct stu { char ID[12];//学号 char name[20];//姓名 int c1;//语文成绩 int c2;//数学成绩 int c3;//英语成绩 struct stu * next; } 测试用例如下: 1 增加数据 2 退出 选择:1 请输入学号:001 请输入名字:张三 请依次输入语文,数学外语成绩:88 89 90 1 增加数据 2 退出 选择:1 请输入学号:0*/ #include<stdio.h> #include<stdlib.h> struct stu { char ID[12];//学号 char name[20];//姓名 int c1;//语文成绩 int c2;//数学成绩 int c3;//英语成绩 struct stu * next; }; struct stu*Append() { struct stu*pHead=NULL,*pNew=NULL,*pTail=NULL; pNew=(struct stu*)malloc(sizeof(struct stu));//给一个stu分配空间! int i=0; int a; printf("1 增加数据\n"); printf("2 退出\n"); printf("选择"); scanf("%d",&a); for(i=0;i<100;i++) { if(a==1) { printf("请输入学号:"); scanf("%s",&pNew->ID); printf("请输入名字:"); scanf("%s",&pNew->name); printf("请依次输入语文,数学,外语成绩:"); scanf("%d%d%d",&pNew->c1,&pNew->c2,&pNew->c3); if(pHead==NULL) pHead=pNew; else pTail->next=pNew; pTail=pNew; pNew->next=NULL; printf("1 增加数据\n"); printf("2 退出\n"); printf("选择"); scanf("%d",&a); getchar(); //吞掉回车,不然的话回车会进入gets.gets直接结束 } else break; } return pHead; } void DisLink(struct stu *pHead) { struct stu*p=pHead; int n=1; printf("序号\t学号\t名字 \t语文\t数学\t外语\t总分\n"); while(p!=NULL) { int sum=p->c1+p->c2+p->c3; printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n",n,p->ID,p->name,p->c1,p->c2,p->c3,sum); p=p->next; n++; } } void Sort(struct stu*pHead) { int n=0; struct stu *p,*q,*t; p=pHead; for(;p!=NULL;p=p->next) { p->next=q; if((p->c1+p->c2+p->c3)>(q->c1+q->c2+q->c3)) { t=p,p=q,q=p; } } /* printf("排序后\n"); printf("序号\t学号\t名字 \t语文\t数学\t外语\t总分\n"); while(p!=NULL) { printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n",n,p->ID,p->name,p->c1,p->c2,p->c3,p->c1+p->c2+p->c3); p=p->next; n++; }*/ } void DeleteMemory(struct stu* pHead) { struct stu *p; while (NULL != pHead) { p = pHead; pHead = pHead->next; free(p); // 下一个节点 free(Pointer); } } int main() { struct stu *p; p=Append(); DisLink(p); Sort(p); printf("排序后"); DisLink(p); DeleteMemory(p); return 0; }
c++string和char[],我有一段代码,和测试数据,但是我发现使用string时这段代码出错了,我把string换成对应的char []后代码正常运行
题目描述: 职工有职工号,姓名,年龄.输入n个职工的信息,找出3个年龄最小的职工打印出来。输入第一行包括1个整数N,1<=N<=30,代表输入数据的个数。 接下来的N行有N个职工的信息: 包括职工号(整数), 姓名(字符串,长度不超过10), 年龄(1<=age<=100)。 输出描述: 可能有多组测试数据,对于每组数据, 输出结果行数为N和3的较小值,分别为年龄最小的职工的信息。 关键字顺序:年龄>工号>姓名,从小到大。 代码思路很简单,维持一个长度为4的数组(有序),每输入一个数据就插入排序(0->n是从小到大,),最终输出前三,但是我这代码通过了90%测试,最后停在一个测试数据上,我debug后发现,问题出现在90 30 61这一行的输入上。他错误地认为61小于18,然后把63插入到数组中(debug的时候想输出一下string name的值然后程序就卡死了)。之后我用char name[10]代替了结构体中的string name,问题就解决了。想问以下为什么。 ``` #include<iostream> #include<string.h> using namespace std; struct stuff{ string name; int age; int id; stuff(string n,int i,int a){ name=n; id=i; age=a; } }; void insertsort(stuff* stuffs[],stuff* s){ int i,j; for(i=0;i<3;i++){ if( (s->age<stuffs[i]->age) || (s->age==stuffs[i]->age)&&(s->id<stuffs[i]->id) || (s->id==stuffs[i]->id)&&(s->name<stuffs[i]->name)){ for(j=3;j>i;j--){ stuffs[j]=stuffs[j-1]; } stuffs[i]=s; break; } } } int main(){ int n,i,j; while(cin>>n){ stuff* stuffs[4]; for(i=0;i<4;i++){ stuffs[i]=new stuff("nn",-10,10000); } string name; int id; int age; for(i=0;i<n;i++){ cin>>id>>name>>age; stuff* s = new stuff(name,id,age); insertsort(stuffs,s); } for(i=0;i<3;i++){ cout<<stuffs[i]->id<<" "<<stuffs[i]->name<<" "<<stuffs[i]->age<<"\n"; } } return 0; } ``` 出现问题的数据: 19 80 53 96 7 51 78 55 14 51 58 40 44 78 74 27 50 75 53 95 41 43 90 99 18 8 67 69 60 67 94 12 64 85 90 30 61 29 7 39 45 20 79 45 95 16 79 61 70 32 69 80 97 55 24 68 67 17 应该输出的结果: 45 95 16 68 67 17 90 99 18 实际输出的结果: 45 95 16 68 67 17 97 55 24 当我把结构体中string name用char name[10]代替后发现正常输出了。 说的不清楚,用char name[]替换string name并不是仅仅替换名字,以下是替换后的代码 ``` #include<iostream> #include<string.h> using namespace std; struct stuff{ char name[10]; int age; int id; stuff(char n[10],int i,int a){ int k=0; while(n[k]!='\0'){ name[k]=n[k]; k++; } name[k]='\0'; id=i; age=a; } stuff(){ } }; void insertsort(stuff* stuffs[],stuff* s){ int i,j; for(i=0;i<3;i++){ if( (s->age<stuffs[i]->age) || (s->age==stuffs[i]->age)&&(s->id<stuffs[i]->id) || (s->id==stuffs[i]->id)&&(strcmp(stuffs[i]->name,s->name)==0)){ for(j=3;j>i;j--){ stuffs[j]=stuffs[j-1]; } stuffs[i]=s; break; } } } int main(){ int n,i,j; char tmpname[]="jahah"; while(cin>>n){ stuff* stuffs[4]; for(i=0;i<4;i++){ stuffs[i]=new stuff(tmpname,-10,10000); } char name[10]; int id; int age; for(i=0;i<n;i++){ cin>>id>>name>>age; stuff* s = new stuff(name,id,age); insertsort(stuffs,s); } for(i=0;i<3;i++){ cout<<stuffs[i]->id<<" "<<stuffs[i]->name<<" "<<stuffs[i]->age<<"\n"; } } } ```
用c语言的题目,应该怎么编。
话说,韩信将军神机妙算,兵法娴熟,武艺超群,同时还是一位独具慧眼的将军,能够一眼看出士兵的武艺值 X。一次执行任务,韩信将军到校场点兵,已知校场一共有N位士兵,士兵们的武艺值高低不齐。 随军主簿说一共要选M位士兵,并且要满足所挑选士兵的武艺值 X 依次严格递增。(从第一名士兵开始选,可以选也可以不选,只要满足武艺值递增且人数满足M就算一种方案。) 韩信将军眯了眯眼睛,立即说出了所有可能选择方案数。 数据范围: 1 <= M <= N <= 1000 ,每一个士兵的武艺值 X ( 1 <= X <= 10^9) 输入 第一行输入一个正整数num,代表一共有num组测试数据。( 1 <= num <= 100) 对于每组数据,第一行包含两个整数N和M,N代表士兵总数,M代表挑选的士兵数。 第二行包含N个整数,表示士兵的武艺值X。 输出 每组数据输出一个结果,每个结果占一行。 输出格式为“Answer #a: b”,a为数据组别序号,从1开始,b为结果。 由于数据可能很大,请你输入对 10^9+10 取模后的结果。
大一新生 学校oj上的问题 实在不知道哪里错了 大佬们能帮我解决一下吗?
``` #include<stdio.h> #include<string.h> int main() { int len2,len1,i,max,n; while(scanf("%d",&n)!=EOF) { char s1[2000]={0},s2[1000]={0}; gets(s1); gets(s2); len1=strlen(s1); max=0; for(i=1;i<len1;i++)//寻找一串字符中最大的字符 { if(s1[i]>s1[max]) max=i; } len2=strlen(s2); for(i=len1-1;i>=max+1;i--)//将s1字符串中最大字符后面的字符移动len2个位置 { s1[i+len2]=s1[i]; } for(i=max+1;i<=max+len2;i++)//将s2中的字符插入到s1当中 { s1[i]=s2[i-max-1]; } puts(s1); } return 0; } ``` 问题:给定两个字符串s和t,在s字符串中的最大字符后边插入字符串t。 输入:测试数据有多组,每组包含两个字符串s和t,分别占两行,均不超过100个字符。 输出:对于每组测试数据,输出插入后的新字符串,单独占一行。若有多个最大字符,则插在第一个之后。 我试了很多组数据都对了(用的dev c++),但是在学校的oj上还是wa
C语言来编写,Xor Sum
Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeus 发起M次询问,每次询问中包含一个正整数 S ,之后 Zeus 需要在集合当中找出一个正整数 K ,使得 K 与 S 的异或结果最大。Prometheus 为了让 Zeus 看到人类的伟大,随即同意 Zeus 可以向人类求助。你能证明人类的智慧么? Input 输入包含若干组测试数据,每组测试数据包含若干行。 输入的第一行是一个整数T(T < 10),表示共有T组数据。 每组数据的第一行输入两个正整数N,M(<1=N,M<=100000),接下来一行,包含N个正整数,代表 Zeus 的获得的集合,之后M行,每行一个正整数S,代表 Prometheus 询问的正整数。所有正整数均不超过2^32。 Output 对于每组数据,首先需要输出单独一行”Case #?:”,其中问号处应填入当前的数据组数,组数从1开始计算。 对于每个询问,输出一个正整数K,使得K与S异或值最大。 Sample Input 2 3 2 3 4 5 1 5 4 1 4 6 5 6 3 Sample Output Case #1: 4 3 Case #2: 4
PTA:1008 数组元素循环右移问题(部分正确)
题目:一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法? 输入格式: 每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。 输出格式: 在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。 输入样例: 6 2 1 2 3 4 5 6 输出样例: 5 6 1 2 3 4 程序清单: ``` #include<stdio.h> int main() { int n,m,a[1000]; scanf("%d %d",&n,&m); int count=m; while(m<n) { scanf("%d",&a[m]); m++; } for(int i=0;i<count;i++) scanf("%d",&a[i]); int first=1; for(int i=0;i<n;i++) { if(!first)printf(" "); printf("%d",a[i]); first=0; } } ``` 结果:![图片说明](https://img-ask.csdn.net/upload/201912/27/1577446541_464126.png) 因为说要少交换我就干脆不交换了,不知道问题出在哪,请教了~
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
【JSON解析】浅谈JSONObject的使用
简介 在程序开发过程中,在参数传递,函数返回值等方面,越来越多的使用JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,同时也易于机器解析和生成、易于理解、阅读和撰写,而且Json采用完全独立于语言的文本格式,这使得Json成为理想的数据交换语言。 JSON建构于两种结构: “名称/值”对的集合(A Collection of name/va...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
只因接了一个电话,程序员被骗 30 万!
今天想给大家说一个刚刚发生在我身边的一起真实的诈骗经历,我的朋友因此被骗走30万。注:为了保护当事人隐私,部分情节进行了修改。1平安夜突来的电话开始以为就像普通的诈骗一样,想办法让你把钱...
我一个37岁的程序员朋友
周末了,人一旦没有点事情干,心里就瞎想,而且跟几个老男人坐在一起,更容易瞎想,我自己现在也是 30 岁了,也是无时无刻在担心自己的职业生涯,担心丢掉工作没有收入,担心身体机能下降,担心突...
python自动下载图片
近日闲来无事,总有一种无形的力量萦绕在朕身边,让朕精神涣散,昏昏欲睡。 可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢,我不禁陷入了沉思。。。。 突然旁边的IOS同事问:‘嘿,兄弟,我发现一个网站的图片很有意思啊,能不能帮我保存下来提升我的开发灵感?’ 作为一个坚强的社畜怎么能说自己不行呢,当时朕就不假思索的答应:‘oh, It’s simple. Wait for me for a ...
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
Java 14 都快来了,为什么还有这么多人固守Java 8?
从Java 9开始,Java版本的发布就让人眼花缭乱了。每隔6个月,都会冒出一个新版本出来,Java 10 , Java 11, Java 12, Java 13, 到2020年3月份,...
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
Idea 中最常用的10款插件(提高开发效率),一定要学会使用!
学习使用一些插件,可以提高开发效率。对于我们开发人员很有帮助。这篇博客介绍了开发中使用的插件。
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
立即提问