作业比赛编号 : 1236 - [C2]期末考试-C135晚
枚举
确定可取的范围,然后判断是否符合题意百钱百只因
#include<bits/stdc++.h> using namespace std; int main(){ int n,cnt=0; cin>>n; // i循环5元鸡的 for (int i=0;i<=n/5;i++){ // j循环3元鸡 for (int j=0;j<=n/3;j++){ // 通过i和j计算1/3元鸡的数量 int k; k=(n-i*5-j*3)*3; if (k+i+j==n) { cnt++; } } } cout<<cnt; return 0; }
模拟
将题目转换成代码,题目中的每一句话,在代码中都要有对应高精度
注意点:- 逆序存储
- 进位的保存
#include<bits/stdc++.h> using namespace std; int A[10000],B[10000],C[10000]; string add(string a,string b){ int alen=a.size(); int blen=b.size(); int len=max(alen,blen); int temp=0; string ans=""; for (int i=0;i<blen;i++){ B[i]=b[blen-1-i]-'0'; } for (int i=0;i<alen;i++){ A[i]=a[alen-1-i]-'0'; } for (int i=0;i<len;i++){ C[i]=A[i]+B[i]+temp; temp=C[i]/10; C[i]%=10; ans=char(C[i]+'0')+ans; } if (temp!=0) { ans='1'+ans; } return ans; } int main(){ string a,b; cin>>a>>b; cout<<add(a,b); }
高精度乘法
#include<bits/stdc++.h> using namespace std; int a[200],b[200],c[40000]; int main(){ string s1,s2; cin>>s1>>s2; int temp=0; int lens1=s1.size(); int lens2=s2.size(); for(int i=0;i<lens1;i++){ a[i]=s1[lens1-1-i]-'0'; } for(int i=0;i<lens2;i++){ b[i]=s2[lens2-1-i]-'0'; } for(int i=0;i<lens1;i++){ temp=0; for(int j=0;j<lens2;j++){ c[i+j]+=temp+a[i]*b[j]; temp=c[i+j]/10; c[i+j]%=10; } c[i+lens2]=temp; } int lens3=lens1+lens2; while(c[lens3]==0&&lens3>1) lens3--; for(int i=lens3;i>=0;i--) cout<<c[i]; return 0; }
排序
sort(数组名+开始元素的下标, 数组名+需要排序的元素数量, 排序方式cmp)cmp函数样例(表示排序方式从大到小)
bool cmp(int x, int y){ return x>y; }
定义结构体
strcut s{ int x,y; };
cmp函数注意事项:
- 待排序的数组类型是什么,cmp的参数就是什么类型
- 结构体排序一定要有cmp
贪心
求最值问题有可能就是贪心,注意贪心策略的推导与求证,可以用数学方法判断素数
bool isPrime(int n){ if (n<=1) return false; for (int i=2;i<=sqrt(n);i++){ if(n%i==0) return false; } return true; }
比赛尚未开始或私有,不能查看题目。