一级
闰年判断
bool st=false;
if (y%4==0&&y%100!=0||y%400==0)
{
st=true;
}
if(st) //闰年的执行语句
{}
else //非闰年执行语句
{}
基础时间问题
1年12月,1天24小时,1个小时60分钟,1分钟60秒
1,3,5,7,8,10,12为大月31天
4,6,9,11为小月 30天
h(小时),m(分钟),s(秒)
int t=h*3600+m*60+s 可以得到当前时间距离0点的秒数
h=t/3600 可以得到距离0点的秒数对应的小时数
m=(t%3600)/60 可以得到距离0点的秒数对应的分钟数
s=t%60 可以得到对应的秒数
int ge=x%10;
int shi=x/10%10;
int bai=x/100%10;
int qian=x/1000%10;
int x=a/b;表示a个苹果分给b个人一共可以分成多少分
int y=a%b;表示a个苹果分给b个人还剩下多少(也可以表示完整周期多出来的数目,等于0表示恰好分完)
int t=(a+b-1)/b;表示a除以b的上取整的结果,类似于如果4个小时吃一个苹果,那么10个小时吃过三个苹果3=(10+4-1)/3
同理也可以得到一年距离0天的数目d
int w=(t+6)/7就可以得到第几周了
int d1=t%7,就可以得到是第w周的星期d1,如果d1==0说明是周天。
if(a%b==0) 表示a是b的倍数
if(a%b!=0) 表示a不是b的倍数
for/while循环之中continue是继续下次循环,break是跳出当前层循环。
//因数,约数
int s1=0,s2=0;
for(int i=1;i<=n;i++) //枚举1到n的范围
{
if(n%i==0) //说明i是n的因数
{
s1+=1;//统计1到n中n的个数
s2+=i;//统计1到n中n的因数之和
}
}
累乘
int s=1;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
s=s*x;
}
pow(a,b)得到a的b次方
累加
int s=1;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
s=s+x;
}
最大
int mav=0;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
if(i==1||x>maxv)
{
maxv=x;
}
}
判断是否符合规则的结构,如x*x*x=n
bool st=false; 最开始没有
for(int x=1;x*x*x<=n;x++) //枚举x的所有范围
{
if(x*x*x==n)
{
st=true;//找到了就更新状态
}
}
if(st) 可以找到
二级
图形输出(i表示行,j表示列)
for(int i=1;i<=n;i++) //枚举行
{
for(int j=1;j<=m;j++) //枚举列(正方形的时候m=n)
{
//根据不同的情况写if筛选图形(一般是if,else if(),else 结构)
}
cout<<endl;//第i行输出以后进行换行
}
第一列和最后一列 j==1||j==m
第一行或者是最后一行 i==1||i==n
左上到右下的对角线 i==j
左下到右上的对角线 i+j==n+1
中间的行(n+1)/2==i,中间的列(m+1)/2==j
拆数
int t=n;
int s1=0(位数),s2=0(每位数的和),s3=0(翻转数);
while(t)
{
int ge=t%10;
s1++; //统计位数
s2+=ge; //每个数的和
s3=s3*10+ge; //翻转数
t/=10;
}
//拆数完成后,t的值为0
bool st=true;
if(st<2)
{
st=false;
}
for(int i=2;i<=n/i;i++)
{
if(n%i==0)
{
st=false;
}
}
if(st) //满足质数条件
对于数据范围较小的数据
int cnt=0;
for(int i=1;i<=n;i++)
{
if(n%i==0)
{
cnt++;
}
}
if(cnt==2) //说明是质数(素数)
斐波那契数列
初始化 a[1]=1,a[2]=2; //第一项是1,第二项是2
for(int i=3;i<=n;i++) //从第三项开始是前两项之和
{
a[i]=a[i-1]+a[i-2];
}
多组数组的状态判定(判断x*x+y*y==a)
int t;
cin>>t;
while(t--)
{
cin>>a;
int cnt=0;//清空状态(最开始找不到)
for(int x=1;x*x<=n;x++) //枚举x的情况
{
for(int y=x+1;y*y<=n;y++) //枚举y的情况(如果x和y是相同不同数,可以让y=x+1,如果y可以等于x,则让y=1)
{
if(x*x+y*y==a) //根据题目要求改变状态
{
cnt++;
}
}
}
}
和行列有关的矩阵输出([GESP202503 二级] 等差矩阵)
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
int t=i*j;//根据题目要求计算
cout<<t<<endl;
}
cout<<endl;
}
## 三角形结构输出()
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
//根据题目要求执行
}
cout<<endl;//输出换行符号
}
状态判断类题目([GESP202309 二级]数字黑洞)
int cnt=0;
while(n!=495)
{
cnt++;
根据题目要求进行操作
}
多重枚举状态判定(类似于白钱百鸡)
int cnt=0;//初始状态
for(int a=0;a<=n;a++) //a的范围
{
for(int b=0;b<=m;b++) //b的范围
{
for(int c=0;c<=m;c++) //c的范围
{
if() //根据题目要求去筛选
}
}
}
//根据状态结果去输出