CCF-Csp算法能力认证,202203-1未初始化警告(C++)含解析

前言

也有推荐书目的,在这里也推荐那一本《算法笔记》(胡明),需要PDF的话,链接如下

「链接:https://pan.xunlei.com/s/VNvz4BUFYqnx8kJ4BI4v1ywPA1?pwd=6vdq# 提取码:6vdq”复制这段内容后打开手机迅雷App,查看更方便」

其他内容系列前面几篇都有,就不再搞了。

希望有大神能够提供改良意见,敬礼!

---------------------------------------------------------------------------------------------------------------------------------

题目

【题目描述】

【输入格式】

【输出格式】

输出一个整数,表示有右值未被初始化问题的赋值语句条数。

【样例 1 输入】

10 7
1 2
3 3
3 0
3 3
6 2
2 1
8 2

【样例 1 输出】

3
 

【样例 1 解释】

其中第一、二、五条赋值语句右值未被初始化。

【样例 2 输入】

【样例 2 输出】

【样例 2 解释】

【子任务】

思路分析

本题的思想比较简单,

使用一个数组来存储n个值,第几个数下标就是几,bool型,每个赋值语句都要把下标为左值的bool型变量改成true,象征已经被赋值了。

如果语句中以右值为下标的bool型变量的值为false,就意味着该赋值语句存在未被初始化的问题。Result++。

在题中案例1里有一个3,0的特殊案例,原因是左值右值表示的都不是数,而是第左值\右值个变量,不会有第0个变量,所以0就是一个单纯的数值,并不能算右值。

代码如下:

#include <bits/stdc++.h>//万能头文件 
using namespace std;


int main() {
	int n=0;//n是数字的范围(数组长度) 
	int k=0;//赋值语句数,循环条件i 
	int resultsum=0;//存储结果 
	//const int N=10000;
	cin>>n>>k; 
	
	bool b[n+1]; //判断是否已经被赋值了,没有就是0,有就是1 
	b[0]=true; 
	for(int i=1;i<n+1;i++){
		b[i]=false;
	}
	//样例中存在一个3,0不算右值未赋值,因为前面的i的范围是1开始的,不包括0,0就单纯的作为一个值了 
	//输入 
	int left;
	int right;
	for(int i=0;i<k;i++){
		cin>>left>>right;
		if(b[right]==false){
			resultsum++;//右值为false 
			
		}
		b[left]=true;//左值被赋值,变为true 
	} 
	
	cout<<resultsum<<endl;
	

	return 0;
}

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值