作业比赛编号 : 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;
} 



模拟

将题目转换成代码,题目中的每一句话,在代码中都要有对应

高精度

注意点:
  1. 逆序存储
  2. 进位的保存
高精度加法
#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函数注意事项:
  1. 待排序的数组类型是什么,cmp的参数就是什么类型
  2. 结构体排序一定要有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;
}

比赛尚未开始或私有,不能查看题目。




返回上一页