2044OI代码规范

前言#

2044 OI 代码规范(下面简称“规范”)为 2044 博客的所有题解、算法笔记等代码的标准,大家也可以以此规范作为参考。

本规范仅适用于 C++ 代码

对于变量和常量#

  • 变量应当使用下划线命名,除题意说明外,应尽量减少毫无意义的变量名。
  • 尽可能的减少全局变量的使用。
  • 常量应该为全大写字母,并使用 const 定义。
  • 除非数据范围需要,尽量减少对于 long long 等类型的使用。
  • 应当为 bool 的变量尽量不用 intlong long 等类型。

符合规定的定义:

int age = 10;
bool gender = 1;

不符合规定的定义:

int hoheiheiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa = 114514;
long long age = 10;

对于函数与结构体#

  • 函数的类型尽量不用 auto 关键字。
  • 函数名与结构体名命名应使用下划线命名法或者大驼峰命名法。
  • 函数(结构体)名应该可以表达它的意思,除题意说明,不应该使用毫无意义的函数(结构体)名。
  • 函数最后应该有明确的返回值 (void 类型除外)。
  • 一个函数内代码量大于等于 15 行的单一功能代码块,应当抽象成函数。

符合规定的定义:

bool isprime(int n)
{
	for (int i = 2; i < n; i++)
	{
		if (n % i == 0)
		{
			return false;
		}
	}
	return true;
}

不符合规定的定义:

auto f(double a, double b)
{
	if (a % 2 == 0)
	{
		return b;
	}
}

对于运算符#

  • 双目运算符前后应当各有个空格。
  • 单目运算符前应当有一个空格。
  • 左括号前应当有一个空格。左括号有应当有一个空格。
  • 右大括号应当独占一行。
  • 左大括号要么独占一行,要么和上一行的最后一个符号,以空格隔开。
  • 对于表达式里重复两次及以上的子表达式,应当用宏定义或者函数抽象出来。

符合规定的定义:

for (int i = 1; i <= n; i++)
{
	if (!arr[i])
	{
		cout << i << " ";
	}
	else {
		cout << i * i << " ";
	}
}

不符合规定的定义:

for(int i=1;i<=n;i++){if(!arr[i]){cout<<i<<" ";}else{cout<<i*i<<" ";}}

其他规定#

  • 无论缩进代码块有几行,都必须使用大括号并缩进。
  • 头文件必须写在开头。
  • 对于诸如 #ifdef DEBUG 的调试语句,之间的代码应当缩进。
  • 最大缩进格数不应超过 4,极端情况下不能超过 5,最好不要超过 3,对于缩进格数较多的代码块,应使用提取函数、提前返回等手段减少缩进。
  • 最后的成品代码应当删除用来调试的注释语句。

示范代码#

源自文章AT_abc057_d 题解,代码如下:

#include <algorithm>
#include <cstdio>
#include <iostream>
using namespace std;
long long YangHuiTraingle[55][55]; // 杨辉三角,排列组合用
void init()
{
    YangHuiTraingle[0][0] = 1;
    for (int i = 1; i <= 50; i++)
    {
        YangHuiTraingle[i][0] = 1;
        for (int j = 1; j <= i; j++)
        {
            YangHuiTraingle[i][j] = YangHuiTraingle[i - 1][j] + YangHuiTraingle[i - 1][j - 1];
        }
    }
}
long long arr[114514];
int n, A, B;
long long average = 0.0; // 平均值
int main()
{
    init();
    cin >> n >> A >> B;
    for (int i = 1; i <= n; i++)
    {
        cin >> arr[i];
    }  
    // 排序,注意 greater要用 long long
    sort(arr + 1, arr + n + 1, greater<long long>());
    long long choose = 0; // 选择了多少元素?
    long long choosebefore = 0; // 表示 k_1
    long long chooseafter = 0; // 表示 k_2
    for (int i = 1; i <= n; i++)
    {
    // 这是刚开始写错的,不用过多理会
        if (choose < A)
        {
            average += arr[i];
            choose++;
        }
        else if (choose > B)
        {
            break;
        }
        else if (choose >= A && arr[i] > average)
        {
            average += arr[i];
            choose++;
        }
    }
    for (int i = 1; i <= n; i++)
    {
        if (arr[i] == arr[A])
        {
            choosebefore++;
            if (i <= A)
            {
                chooseafter++;
            }
        }
    }
    long long ans2 = 0;
    if (arr[1] == arr[A])
    
    {
        for (int i = A; i <= B; i++)
        {
            ans2 += YangHuiTraingle[choosebefore][i];
        }
    }
    else
    {
        ans2 += YangHuiTraingle[choosebefore][chooseafter];
    }
    printf("%.6lf\n%lld", (average / (double)(choose)), ans2);
}

作者:2044-space-elevator

出处:https://www.cnblogs.com/2044-space-elevator/articles/17982497

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   CoutingStars  阅读(13)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示