目录
1001.3n+1猜想
1002.写出这个数
1004.成绩排名
1086 就不告诉你
1087 有多少不同的值 (20分)
1091 N-自守数 还没写好 还没想过
1008 数组元素循环右移问题 (20分) 没想明白
1010 一元多项式求导 (25分)
1011 A+B 和 C (15分)
1012 数字分类 (20分)
1016 部分A+B (15分)
1018 锤子剪刀布 (20分)
简单模拟 20题 7 字符串处理 17题 1 进制转换 3题 数学 4题 动态规划 2题
中级模拟 7题 散列 11题 贪心 3题 排序 4题 链表 2题
水题 3题 √3 素数 3题 查找 7题 1 stl 3题 其他 6题
11
X:没想明白
?:在想想
编号 |
标题 |
分类 |
简单模拟 |
||
1001 √ |
3n+1猜想 | 简单模拟 |
1008 |
数组元素循环右移问题 | 简单模拟 X |
1010 |
一元多项式求导 | 简单模拟 |
1011 |
A+B 和 C | 简单模拟 |
1012 |
数字分类 | 简单模拟 X |
1016 |
部分A+B | 简单模拟 |
1018 |
锤子剪刀布 | 简单模拟 ? |
1026 |
程序运行时间 |
简单模拟 |
1046 |
划拳 |
简单模拟 |
1053 |
住房空置率 |
简单模拟 |
1056 |
组合数的和 |
简单模拟 |
1061 |
判断题 |
简单模拟 |
1063 |
计算谱半径 |
简单模拟 |
1066 |
图像过滤 |
简单模拟 |
1068 |
万绿丛中一点红 |
简单模拟 |
1071 |
小赌怡情 |
简单模拟 |
1076 |
Wifi密码 |
简单模拟 |
1077 |
互评成绩计算 |
简单模拟 |
1088 |
三人行 |
简单模拟 |
1089 |
狼人杀-简单版 |
简单模拟 |
中级模拟 |
||
1050 |
螺旋矩阵 |
中级模拟 |
1055 |
集体照 |
排序+中级模拟 |
1058 |
选择题 |
中级模拟+常用stl |
1060 |
爱丁顿数 |
中级模拟 |
1069 |
微博转发抽奖 |
中级模拟 |
1072 |
开学寄语 |
中级模拟+二分查找 |
1073 |
多选题常见计分法 |
中级模拟+常用stl |
水题 |
||
1086 |
就不告诉你 | 水题(字符串string)(小技巧) |
1087 |
有多少不同的值 | 水题(set s.size s.insert) |
1091 |
N-自守数 | 水题 X |
字符串处理 |
||
1002 √ |
写出这个数 | 字符串处理 |
1006 |
换个格式输出整数 |
字符串处理 |
1009 |
说反话 |
字符串处理 |
1014 |
福尔摩斯的约会 |
字符串处理 |
1021 |
个位数统计 |
字符串处理 |
1024 |
科学计数法 |
字符串处理 |
1027 |
打印沙漏 |
字符串处理 |
1031 |
查验身份证 |
字符串处理 |
1044 |
火星数字 |
进制转换+字符串处理 |
1048 |
数字加密 |
字符串处理 |
1052 |
卖个萌 |
字符串处理 |
1054 |
求平均值 |
字符串处理 |
1067 |
试密码 |
字符串处理 |
1074 |
宇宙无敌加法器 |
进制转换+字符串处理 |
1078 |
字符串压缩与解压 |
字符串处理 |
1081 |
检查密码 |
字符串处理 |
1084 |
外观数列 |
字符串处理 |
进制转换 |
||
1022 |
D进制的A+B |
进制转换 |
1037 |
在霍格沃茨找零钱 |
进制转换 |
1057 |
数零壹 |
进制转换 |
散列 |
||
1005 |
继续(3n+1)猜想 |
散列 |
1029 |
旧键盘 |
散列 |
1033 |
旧键盘打字 |
散列 |
1038 |
统计同成绩学生 |
散列 |
1039 |
到底买不买 |
散列 |
1042 |
字符统计 |
散列 |
1043 |
输出PATest |
散列 |
1047 |
编程团体赛 |
散列 |
1059 |
C语言竞赛 |
散列 |
1065 |
单身狗 |
散列+常用stl |
1093 |
字符串A+B |
散列 |
数学 |
||
1003 |
我要通过! |
数学 |
1019 |
数字黑洞 |
数学 |
1049 |
数列的片段和 |
数学 |
1051 |
复数乘法 |
数学 |
贪心 |
||
1020 |
月饼 |
贪心 |
1023 |
组个最小数 |
贪心 |
1070 |
结绳 |
贪心 |
排序 |
||
1015 |
德才论 |
排序 |
1080 |
MOOC期终成绩 |
排序 |
1085 |
PAT单位排行 |
排序 |
1095 |
解码PAT准考证 |
排序 |
素数 |
||
1007 |
素数对猜想 |
素数 |
1013 |
数素数 |
素数 |
1094 |
谷歌的招聘 |
素数 |
查找 |
||
1004 |
成绩排名 | 查找元素 |
1028 |
人口普查 |
查找元素 |
1030 |
完美数列 |
二分查找、two pointers |
1032 |
挖掘机技术哪家强 |
查找元素 |
1041 |
考试座位号 |
查找元素 |
1082 |
射击比赛 |
查找元素 |
1092 |
最好吃的月饼 |
查找元素 |
常用stl |
||
1064 |
朋友数 |
常用stl |
1083 |
是否存在相等的差 |
常用stl |
1090 |
危险品装箱 |
常用stl |
动态规划 |
||
1040 |
有几个PAT |
动态规划 |
1045 |
快速排序 |
动态规划 |
链表 |
||
1025 |
反转链表 |
链表 |
1075 |
链表元素分类 |
链表 |
其他 |
||
1017 |
A除以B |
大整数运算 |
1079 |
延迟的回文数 |
大整数运算 |
1035 |
插入与归并 |
暂无 |
1036 |
跟奥巴马一起编程 |
图形输出 |
1034 |
有理数四则运算 |
分数 |
1062 |
最简分数 |
分数 |
C语言版
#include
int main()
{
int n,i;
i=0;
scanf("%d",&n);
while(n!=1)
{
i++;
if(!(n%2))//(n%2)->=1 !(n%2)->n%2==0
{
n=n/2;
}
else
{
n=(3*n+1)/2;
}
}
printf("%d",i);
}
C++
#include
using namespace std;
int main() {
int n, count = 0;
cin >> n;
while (n != 1) {
if (n % 2 != 0) n = 3 * n + 1;
n = n / 2;
count++;
}
cout << count;
return 0;
}
我以C为主,C++参考,同时学习有些函数和概念。
代码多数是参考别人的。得多读点写法。
写一下这题过程中的问题,在写这个程序的时候,我一直在想如何输入一个数,让这个数中的每个数相加,我想写一个for循环,但是不知道如何去取这个数的边界值,所以到后面就想不出来了。
过程中就算是看了别人的代码,也出现了很多低级错误,还是得谨慎。
考查:字符串的转换,单个字符的输入,如何取一个数的百十个,字符串大小问题
问题:用C++来写是完全不会,很多东西也不懂为啥是这样,不过还好有万能的百度。即查即用。
#include
temp[s[i]-'0'].c_str() 解释
https://blog.csdn.net/zhanghuaichao/article/details/53158332
解释:string num = to_string(sum);
c++之to_string()函数
功能:
将数值转化为字符串。返回对应的字符串。
C
#include
int main() //c=getchar() 没加括号 a[80]不够了 != sum/10%10
{
int sum=0;
char c,*a[]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
while((c=getchar())!='\n')
sum += c - '0';//c为字符串 比如输入1-49 0-48
if(sum/100)
printf("%s ",a[sum/100]);
if(sum/10)
printf("%s ",a[sum/10%10]);
printf("%s",a[sum%10]);
}
C++
#include
#include
using namespace std;
int main() {
string s;//C++特有字符串
cin >> s;
int sum = 0;
string str[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi","ba", "jiu"};
for (int i = 0; i < s.length(); i++)//字符串长度
sum += (s[i] - '0');
string num = to_string(sum);//把sum-135 给 num;C++直接定义
for (int i = 0; i < num.length(); i++) {
if (i != 0) cout << " ";//看题意不可能有0,小技巧
cout << str[num[i] - '0'];//数组中的数组,这样似乎更方便?
}
return 0;
}
#include
using namespace std;
int main(){
string s;
cin>>s;
int sum=0;
for(int i=0;i0?" ":"",temp[s[i]-'0'].c_str());
return 0;
}
问题:为什么别人的想法总是很简单?自己好好多想想,还是得多做题,多读代码,多写多思考。注意笔记。
思考:我先是想到了结构体,但是忘记怎么写了。
while (~scanf("%d%d",&m,&n))什么用的?!=EOF
C
#include
#include
int main()
{
int N;
scanf("%d", &N);//输入数量
char maxname[11], minname[11], curname[11],//姓名,学号;
maxid[11], minid[11], curid[11];
int maxgrade = -1, mingrade = 101, curgrade;//分数
for(int i = 0; i < N; i++)
{
scanf("%s %s %d", curname, curid, &curgrade);
if(curgrade > maxgrade)
{
strcpy(maxname, curname);//复制 后给前
strcpy(maxid, curid);
maxgrade = curgrade;
}
if(curgrade < mingrade)
{
strcpy(minname, curname);
strcpy(minid, curid);
mingrade = curgrade;
}
}
printf("%s %s\n%s %s", maxname, maxid, minname, minid);
}
#include
#include
int main()
{
int n=0;
scanf("%d",&n);
struct info{
char name[15];
char num[15];
int grade;
};
struct info stu,max,min;
scanf("%s %s %d",&stu.name,&stu.num,&stu.grade);
max=min=stu;
for(int i=1;imax.grade) max=stu;
if (stu.grade
using namespace std;
int main()
{
int n, max = -1, min = 101, score;
cin >> n;
string maxname, minname, maxnum, minnum, name, num;
for (int i = 0; i < n; i++) {
cin >> name >> num >> score;
if (max < score) {
max = score;
maxname = name;
maxnum = num;
}
if (min > score) {
min = score;
minname = name;
minnum = num;
}
}
cout << maxname << " " << maxnum << endl << minname << " " << minnum;
好吧,我是越写到后面就越觉得自己是个废物。不会的东西明明那么多,明明知道如何变强,却什么也不学,天天浪费时间。
明明是水题,却可能写也写不出来。
https://blog.csdn.net/yky__xukai/article/details/79554963
stoi()把数字字符串转换成int输出stoi()会做范围检查,默认范围是在int的范围内的,如果超出范围的话则会runtime error!
将数值转化为字符串。返回对应的字符串。 to_string
reverse(s.begin(), s.end()) c++ 字符串倒置函数
#include
using namespace std;
int main(){
int A,B;
scanf("%d%d",&A,&B);
A*=B; // A=A*B 5*7=35=A
for(B=0;A!=0;A/=10) // 1. B=0+5 B=5 A/10=3 2.B=5*10+3=53
B=B*10+A%10;
printf("%d",B);
return 0;
}
#include
int main()
{
int A, B, C;
scanf("%d %d", &A, &B);
C = A * B;
while(!(C % 10)) // c%10==0 5*7=35 20
C /= 10; // 如果C=20 C/=10=2 下一步就是输出C=2
while(C) //53
{
putchar('0' + C % 10);//输出单个
C /= 10;
}
return 0;
}
#include
#include
#include
using namespace std;
int main() {
int a, b;
scanf("%d %d", &a, &b);
string s = to_string(a * b);
reverse(s.begin(), s.end());
printf("%d", stoi(s));
return 0;
}
https://www.cnblogs.com/AKMer/p/9889811.html
明明是个水题,为什么看了答案,就能想明白,自己想的什么,却什么思路都没有。我是想到了FOR循环。
还是有一点吧,就是说 对语言的熟悉程序还是不够,其次没读懂题,看见题目的时候,就有点害怕。
C++的 STL学习的重要性 运用的重要性 算法思想
#include
set
set头文件主要包括set和multiset两个容器。他们都是有序集合,不过set存的元素不可重复。
两者内部实现都是红黑树,在使用方法上差别不大,支持的函数基本相同。
#include
int main()
{
int c,m,m0=-1,count=0,n;
scanf("%d",&m);
for(n=1;n<=m;n++)
{
c=(n/2)+(n/3)+(n/5);
if(c>m0)
count++;
m0=c;
}
printf("%d",count);
}
#include
#include
using namespace std;
int main() {
int n;
scanf("%d", &n);
set s;//声明方式
for (int i = 1; i <= n; i++)
s.insert(i / 2 + i / 3 + i / 5);//插入一个int类型的数据
printf("%d", s.size());//返回元素个数
return 0;
}
1111
11
1
#include
int main()
{
int N, M, numbers[100];
scanf("%d %d", &N, &M);
M %= N; /* M could be larger than N */
/* Read */
for(int i = 0; i < N; i++)
scanf("%d", &numbers[i]);
/* Print */
for(int i = N - M; i < N; i++) /* Print N - M to N - 1 */
printf("%d ", numbers[i]);
for(int i = 0; i < N - M - 1; i++) /* Print 0 to N - M - 2 */
printf("%d ", numbers[i]);
printf("%d", numbers[N - M - 1]); /* Print N - M - 1, no blankspace */
}
#include
#include
#include
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector a(n);
for (int i = 0; i < n; i++)
cin >> a[i];
m %= n;
if (m != 0) {
reverse(begin(a), begin(a) + n);
reverse(begin(a), begin(a) + m);
reverse(begin(a) + m, begin(a) + n);
}
for (int i = 0; i < n - 1; i++)
cout << a[i] << " ";
cout << a[n - 1];
return 0;
}
题目 居然有隐藏条件 不得不说 读题的时候 还是得仔细
“输出导数多项式非零项的系数和指数”这个条件就是输出的时候只要某一项的指数为0,那么就不输出
这题的话 我想到了一点点,但是没有自己去写,然后看了别人的话,没发现隐藏条件的话,估计怎么写,也不会对。
#include
int main()
{
int coef, index, count = 0;
while(scanf("%d %d", &coef, &index) != EOF)
{
if(index) /* Constant terms result in zero */
{
if(count++) putchar(' ');
printf("%d %d", coef * index, index - 1);
}
}
/* Zero polynomial or constant */
if(count == 0)
puts("0 0");
}
#include
using namespace std;
int main()
{
int coef;
int expo;
cin>>coef>>expo;
if(expo==0)//如果指数为0,则求导后是0多项式
{
cout<<"0 0";
return 0;
}
else//注意第一次输出的格式 !
cout<>coef>>expo)//输入直到文件末尾
if(expo!=0)//注意如果指数为0,不作输出!
cout<<' '<
我写程序的样子 像个智障 连基本的逻辑 都没有 问题 还很多 还找不出来 以前为什么会有喜欢编程的想法
然后真正去操作的时候,越来越觉得或许自己不适合做程序员。
换行符的问题 for在里面与外面的问题 还有最后如何是控制 i 往简单想 大道至简 还有就是数据类型 %ld
#include
int main()
{
int T,i=0;
long int A,B,C;
scanf("%d",&T);
while(scanf("%ld %ld %ld",&A,&B,&C)!=EOF)
{
i++;
if(A+B>C)
{
printf("Case #%d: true\n",i);
}
else
printf("Case #%d: false\n",i);
}
}
#include
using namespace std;
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
long long int a, b, c;
scanf("%lld%lld%lld", &a, &b, &c);
printf("Case #%d: %s\n", i + 1, a + b > c ? "true" : "false");
}
return 0;
}
有时候觉得有些编程题真傻逼,明明可以看出答案,却为什么还要我们写出来。
可基础决定高度。傻逼的往往是你自己,那个不求进取的自己。
这题我有大概的思路,不过还是错了。
#include
long Dpart(long A, int D_A)
{
long P_A;
for(P_A = 0; A; A /= 10)
if(A % 10 == D_A)
P_A = P_A * 10 + D_A;
return P_A;
}
int main()
{
long A, B;
int D_A, D_B;
scanf("%ld %d %ld %d", &A, &D_A, &B, &D_B);
printf("%ld", Dpart(A, D_A) + Dpart(B, D_B));
return 0;
}
#include
int main()
{
char a[12],b[12],da,db;
while(~scanf("%s %c %s %c",a,&da,b,&db))
{
int acount=0,bcount=0;
for(int i=0;a[i]!='\0';++i)
{
if(a[i]==da)
++acount;
}
for(int i=0;b[i]!='\0';++i)
{
if(b[i]==db)
++bcount;
}
int sa=0,sb=0;
for(int i=0;i
水题,然后因为我在做康复训练,一直不在状态。。。所以就算我在状态,估计我也不会。有些东西还是得花时间。
#include
char max(int B, int C, int J)
{
if(B >= C && B >= J) return 'B';
if(C > B && C >= J) return 'C';
/* J > B && J > C */ return 'J';
}
int main()
{
int N;
char a, b;
int AwinB = 0, AwinC = 0, AwinJ = 0;
int BwinB = 0, BwinC = 0, BwinJ = 0;
scanf("%d", &N);
for(int i = 0; i < N; i++)
{
scanf(" %c %c", &a, &b); /* Notice the space before every %c */
if(a == 'B' && b == 'C') AwinB++;
if(a == 'C' && b == 'J') AwinC++;
if(a == 'J' && b == 'B') AwinJ++;
if(a == 'B' && b == 'J') BwinJ++;
if(a == 'C' && b == 'B') BwinB++;
if(a == 'J' && b == 'C') BwinC++;
}
int Awin = AwinB + AwinC + AwinJ;
int Bwin = BwinB + BwinC + BwinJ;
int Tie = N - Awin - Bwin;
printf("%d %d %d\n", Awin, Tie, Bwin);
printf("%d %d %d\n", Bwin, Tie, Awin);
printf("%c %c", max(AwinB, AwinC, AwinJ), max(BwinB, BwinC, BwinJ));
return 0;
}