• ccf_csp第一题汇总


    abs(num)返回整型的绝对值
    fabs(num)返回双精度的绝对值
    exp(x)返回指数函数ex的值
    pow(x, y)返回x^y的值
    sqrt(x)返回√x的值
    
    • 1
    • 2
    • 3
    • 4
    • 5

    printf()输出格式大全(附 - 示例代码)

    printf()输出格式大全(附 - 示例代码)

    现值计算

    #include
    using namespace std;
    
    double ans;
    
    int main()
    {
    	int n;
    	double i;
    	cin>>n>>i;
    	for(int j=0;j<=n;j++)
    	{
    		int x;
    		cin>>x;
    		
    		ans+=x*pow((1+i),-j);
    	}
    	cout<<ans<<endl;
    	return 0;
     } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    AcWing 4699. 如此编码

    AcWing 4699. 如此编码

    #include
    using namespace std;
    const int N = 22;
    
    int main()
    {
        int n,m;
        int a[N];
    
        cin>>n>>m;
        for(int i=1;i<=n;i++) cin>>a[i];
    
        for(int i=1;i<=n;i++)
        {
            cout<<m%a[i]<<" ";
            m/=a[i];
        }
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    AcWing 4509. 归一化处理(小数位数+根号函数)

    AcWing 4509. 归一化处理

    #include
    using namespace std;
    const int N = 1010;
    
    int n;
    double w[N];
    
    int main()
    {
        cin>>n;
    
        double sum=0;
        for (int i=0;i<n;i++)
        {
            cin>>w[i];
            sum+=w[i];
        }
    
        double avg=sum/n;//平均值 
    
        double d=0;
        for (int i=0;i<n;i++)
            d+=pow((w[i]-avg),2)/n;
        d=sqrt(d);//标准差 
        for (int i=0;i<n;i++)
            printf("%.16lf\n", (w[i]-avg)/d);//归一化后 
        return 0;
    }
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    AcWing 4454. 未初始化警告

    AcWing 4454. 未初始化警告

    #include
    using namespace std;
    const int N=1e5+10;
    int n;
    int k;
    bool st[N];//a[k]记录第k个下标是否使用过
    int x,y;
    int ans=0;//记录个数,用于输出
    int main()
    {
    	cin>>n>>k;
    	for(int i=0;i<=n;i++) st[i]=false;
    	st[0]=true;//常量---默认赋过值 
    	for(int i=0;i<k;i++)
    	{
    		cin>>x>>y;
    		if(!st[y])	
    			ans++;
    		st[x]=true;//将左值标记为赋值过
    	}
    	cout<<ans<<endl;
    	
    	return 0;
    	
     } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    AcWing 4280. 序列查询

    AcWing 4280. 序列查询

    在这里插入图片描述

    #include
    using namespace std;
    const int N=1e7+10;
    int n,m;
    int a[N];
    int ans;
    int main()
    {
    	cin>>n>>m;
    	for(int i=1;i<=n;i++) cin>>a[i];
    	a[n+1]=m;//初始 a[0]=0,a[n+1]=m;nb  
    	
    	for(int i=0;i<=n;i++)
    		ans+=(a[i+1]-a[i])*i;//计算f[a]
    	cout<<ans<<endl;
    	return 0;
     } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    AcWing 4006. 数组推导(小陷阱)

    AcWing 4006. 数组推导

    在这里插入图片描述

    #include
    using namespace std;
    const int N=1e2+10;
    int b[N];
    int main()
    {
    	int n;
    	cin>>n;
    	for(int i=0;i<n;i++) cin>>b[i];
    	
    	int maxs=0,mins=0;//存储sum的最大值和最小值 
    	for(int i=0;i<n;i++)
    	{
    		maxs+=b[i];//最大值时 a[i]==b[i] 
    		if(!i||b[i]>b[i-1])//当b[i]是拐点时 必须选上 
    			mins+=b[i];
    	}
    	cout<<maxs<<endl<<mins<<endl;
    	return 0;	
     } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    AcWing 3292. 称检测点查询

    AcWing 3292. 称检测点查询

    题目需要首先按照距离排序,再按照编号排序
    采用pair类型,将first设置为距离,second设置为编号
    调用sort函数进行排序(sort对pair排序先排first,再排second)
    存储距离时,不按照样例存储开根号的值,直接存储平方
    
    • 1
    • 2
    • 3
    • 4
    #include
    using namespace std;
    
    const int N=200+10;
    typedef pair<int,int> PII;
    PII node[N];
    int X,Y; 
    int n;
    
    int main()
    {
    	cin>>n>>X>>Y;
    	for(int i=0;i<n;i++)
    	{
    		int x,y;
    		cin>>x>>y;
    		node[i].first=(X-x)*(X-x)+(Y-y)*(Y-y);//比较距离--不需要开根号
    		node[i].second=i;
    	}
    	sort(node,node+n);
    	for(int i=0;i<3;i++)
    	{
    		cout<<node[i].second+1<<endl;
    	}
    	return 0;
     } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    AcWing 3287. 线性分类器(直线有关)

    AcWing 3287. 线性分类器

    用结构体存储点的信息,sumA记录类型A的点的个数,sumB记录类型B的点的个数
    通过比较在直线一侧各种类型点的数量和sumA、sumB,当一侧全为A类型或者B类型时,满足分类条件
    由于一个点只能位于直线的一侧,因此我们仅选取直线的上侧进行计数,即满足c+a*node[j].x+b*node[j].y>0
    
    • 1
    • 2
    • 3
    #include
    using namespace std;
     
    const int N=1e3+10;
    typedef long long LL;//所有的坐标和参数的绝对值最大为106,参数与坐标相乘后为1012,因此采用long long 数据类型
    LL n,m;
    int sum_A=0;
    int sum_B=0;
    struct {
    	LL x;
    	LL y;
    	char type;
    }node[N]; 
    
    int main()
    {
    	cin>>n>>m;
    	for(LL i=0;i<n;i++)
    	{
    		LL x,y;
    		char type;
    		cin>>x>>y>>type;
    		node[i].x=x;
    		node[i].y=y;
    		node[i].type=type;
    		if(type=='A')
    			sum_A++; 
    		else
    			sum_B++;
    	} 
    	
    	for(LL i=0;i<m;i++)
    	{
    		LL a,b,c;
    		cin>>a>>b>>c;
    		LL sum_A_UP=0;//A类型在直线上方的个数 
    		LL sum_B_UP=0;//B类型在直线上方的个数 
    		for(LL j=0;j<n;j++)
    		{
    			if(a+b*node[j].x+c*node[j].y>0&&node[j].type=='A')//统计A类型在直线上方的个数  
    				sum_A_UP++;
    			if(a+b*node[j].x+c*node[j].y>0&&node[j].type=='B')//统计B类型在直线上方的个数
    				sum_B_UP++;
    		}
    		
    		//A类型全部在直线上方且B类型全在直线下方  ---  B类型全部在直线上方且A类型全在直线下方
    		if((sum_A==sum_A_UP&&sum_B_UP==0) || (sum_B==sum_B_UP&&sum_A_UP==0))
    			cout<<"Yes"<<endl;
    		else
    			cout<<"No"<<endl;
    	}
    	
    	
    	return 0;
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    AcWing 3282. 报数

    AcWing 3282. 报数

    #include
    using namespace std;
    
    int res[4];//存储丁(0)--甲(1)--乙(2)--丙(3)----跳过的个数 
    int main()
    {
    	int n;//记录一共要数几个数 
    	cin>>n; 
    	int i=1;//轮流报数---且---遍历-甲-乙-丙-丁 
    	while(n)
    	{
    		if(i%7==0 || to_string(i).find('7')!=-1)//被跳过时 
    			 res[i%4]++;
    		else//没被跳过时---数数了 
    			n--;
    		
    			 
    		i++;//报数	
    	}
    	for(int i=1;i<4;i++) 
    		cout<<res[i]<<endl;
    	cout<<res[0]<<endl;
    	return 0;
     } 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    AcWing 3277. 小明种苹果

    AcWing 3277. 小明种苹果

    #include
    using namespace std;
    int n,m;
    int main()
    {
    	cin>>n>>m;
    	int T=0,K=0,P=-1;
    	for(int i=1;i<=n;i++)//---n棵苹果树 
    	{
    		int total=0;//某棵苹果树上的苹果总数
    		int sum=0;//某棵苹果树上的梳果总数
    		cin>>total;
    		for(int j=0;j<m;j++)//---m次操作 
    		{
    			int x;
    			cin>>x;
    			sum+=abs(x);
    		 }
    		T+=total-sum;
    		if(sum>P)//如果此次梳果最多---更新 
    			K=i,P=sum; 
    	}
    	cout<<T<<" "<<K<<" "<<P<<endl;
    	return 0;
     } 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    AcWing 3272. 小中大(小数位数)

    AcWing 3272. 小中大

    #include 
    using namespace std;
    const int N = 100010;
    int n;
    int q[N];
    
    int main()
    {
        scanf("%d", &n);
        for (int i = 0; i < n; i ++ ) scanf("%d", &q[i]);
        int res[3];//存储---小 中 大 
        res[0] = q[0] * 2, res[1] = q[n - 1] * 2;
        if (n % 2) res[2] = q[n / 2] * 2;
        else res[2] = q[n / 2 - 1] + q[n / 2];
    
        sort(res, res + 3);//从小到大排序 
        for (int i = 2; i >= 0; i -- )
            if (res[i] % 2) printf("%.1lf ", res[i] / 2.0);//中位数---小数 
            else printf("%d ", res[i] / 2);
        return 0;
    }
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    AcWing 3257. 跳一跳

    AcWing 3257. 跳一跳

    #include
    using namespace std;
    
    int main()
    {
    	int x;
    	int ans=0;	//最终答案 
    	int score=0;	//当前得分 
    	
    	while(cin>>x,x)	//只要输入≠0,就可以一直输入
    	{
    		if(x==1)	//当没有跳到中心时 
    		{
    			ans+=1;
    			score=0;	//等差数列清空 
    		}	
    			
    		else		//当跳到中心时,得分是一个等差数列
    		{
    			score+=2; 
    			ans+=score; 
    		 }  
    	 } 
    	 cout<<ans<<endl;
    	 return 0; 
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    打酱油(贪心算法)

    思路:(贪心算法)
    1.尽可能多的选择买5瓶送2两瓶的方式,然后再选择买3瓶送1瓶,最后才选择10块钱1瓶的方式
    
    • 1
    • 2
    #include
    using namespace std;
    const int N=400;
    
    int n;
    int main()
    {
    	int fifty;
    	int thirty;
    	int ten;
    	cin>>n;
    	fifty=n/50;
    	thirty=(n-fifty*50)/30;
    	ten=(n-fifty*50-30*thirty)/10;
    	cout<<7*fifty+4*thirty+ten<<endl;
    	return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    AcWing 1216. 饮料换购(数学推理)

     共喝饮料数res,当前瓶盖数 n
     赋值给n,且res=n
     一直循环直到瓶盖n<3,每次res += n / 3,n变成了新的饮料/3加上剩下的n%3
    
    • 1
    • 2
    • 3
    #include
    using namespace std;
    
    int main()
    {
    	int n; 
    	cin>>n;//初始买入的饮料数==初始的饮料瓶盖数 
    	int res=n;//一共能喝的饮料数 
    	while(n>=3)
    	{
    		res+=n/3;//可以换购到的第一批饮料数 
    		n=n%3+n/3; //n%3 上次没换完的瓶盖数  n/3新得到的瓶盖数 
    	}
    	cout<<res<<endl;
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    AcWing1219.移动距离

    AcWing1219.移动距离

    #include
    using namespace std;
    int main()
    {
    	int w,m,n;
    	cin>>w>>m>>n;
    	m--,n--;//序号从0开始,方便计算行号和列号
    	int x1=m/w,x2=n/w;//行号 
    	int y1=m%w,y2=n%w;//求列号
    	if(x1%2==0)//当位于偶数行时 
    		y1=w-y1-1;//求列号
    	if(x2%2==0)//当位于偶数行时 
    		y2=w-y2-1;//求列号
    	//曼哈顿距离 
    	cout<<abs(x1-x2)+abs(y1-y2)<<endl;
    	return 0; 
     } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    AcWing 3242. 分蛋糕—双指针—看

    AcWing 3242. 分蛋糕

    #include
    using namespace std;
    const int N=1e3+10;
    int a[N];
    int ans;
    int main()
    {
    	int n,k;
    	cin>>n>>k;
    	for(int i=1;i<=n;i++)	cin>>a[i];
    	
    	for(int i=1;i<=n;i++)//双指针算法 
    	{
    		int j=i,sum=0;
    		while(j<=n && sum<k)sum+=a[j++];
    		ans++;		//最后一个即是不够,ans也会++ 
    		i=j-1;		//当前第j-1个蛋糕已经被使用了,循环外还有个i++; 
    	}
    	cout<<ans<<endl; 
    	return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    AcWing 3237. 中间数—看

    AcWing 3237. 中间数

    #include 
    #include 
    #include 
    
    using namespace std;
    
    const int N = 1010;
    
    int n;
    int q[N];
    
    int main()
    {
        cin >> n;
        for (int i = 0; i < n; i ++ ) cin >> q[i];
    
        for (int i = 0; i < n; i ++ )
        {
            int d = 0, u = 0;
            for (int j = 0; j < n; j ++ )
                if (q[j] < q[i]) d ++ ;
                else if (q[j] > q[i]) u ++ ;
            if (u == d)
            {
                cout << q[i] << endl;
                return 0;
            }
        }
        puts("-1");
        return 0;
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    AcWing 3217. 数列分段

    AcWing 3217. 数列分段

    #include
    using namespace std;
    
    const int N=1e3+10;
    
    int n;
    int a[N];
    
    int main()
    {
    	cin>>n;
    	int ans=1;
    	for(int i=0;i<n;i++)
    	{
    		cin>>a[i];
    	}
    	for(int i=1;i<n;i++)
    	{
    		if(a[i-1]!=a[i])
    			ans++;
    	}
    	cout<<ans<<endl;
    	return 0;
     } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    #include
    using namespace std;
    const int N = 1e3+10;
    int n;
    int a[1001];
    int main()
    {
    	cin>>n;
    	for(int i=0;i<n;i++)
    		cin>>a[i];
    	cout<<unique(a,a+n)-a;
    	return 0;
     } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    AcWing 3197.相反数

    AcWing 3197.相反数

    #include
    using namespace std;
    const int N=1e3+10;
    
    int n;
    int cnt[N];
    int main()
    {
    	cin>>n;
    	while(n--)
    	{
    		int x;
    		cin>>x;
    		cnt[abs(x)]++;
    	}
    	int ans=0;
    	for(int i=0;i<N;i++)
    	{
    		if(cnt[i]==2)
    			ans++;
    	}
    	cout<<ans<<endl;
     } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    ChatGPT对软件测试的影响
    pureComponent
    解决Chrome无法自动同步书签
    2023-09-09青少年软件编程(C语言)等级考试试卷(二级)解析
    java.lang.Float类下parseFloat(String s)方法具有什么功能呢?
    YOLOV7详细解读(二)论文解读
    redis 问题解决 1
    华为OD机试真题 Java 实现【查找树中元素】【2023 B卷 100分】,附详细解题思路
    Node.js精进(10)——性能监控(下)
    Jpackage-制作无需预装Java环境的Jar可执行程序
  • 原文地址:https://blog.csdn.net/qq_50675813/article/details/133441752