练习题一

这篇博客介绍了作者在自学C++过程中遇到的五道编程题,涉及位运算、金币分配问题、向量乘法求最大值、阶乘和数的性质以及括号匹配算法。通过实例解析了每个问题的解决方案,包括位运算的简化应用、遍历解决金币分配问题、向量排序求最大点积、枚举法找出阶乘和数以及计数法判断括号匹配。
摘要由CSDN通过智能技术生成

开始自学c++了,所以这里面的题基本都是c++的风格

*A - 或减与

输入a和b。
输出 a位或b 和 a位与b 的差。
Input
一行两个整数a, b(0 <= a, b <= 1000000000)
Output
输出 a位或b 和 a位与b 的差。
Sample Input
3 5
Sample Output
6
思路:这道题我第一次做的时候,就是最正常的思维,就是先把这两个数全部先化成二进制,然后在进行位运算,然后在化成十进制,比较繁琐。第二次直接就用了位运算。

# include <iostream>
using namespace std;
int main (void)
{
   
	int a,b;
	cin>>a>>b;
	printf("%d",(a|b)-(a&b));//直接位运算就可以了。
}

B - 收金币

地上有n个金币,编号1到n,按照编号从小到大顺时摆成一个圈。每一个金币有一价值pi(1<=i<=n)。现在大Noder和小Noder开始收金币,他们每个人都要收集编号连续的金币。大Noder从1号开始顺时针收集,小Noder从n号开始逆时针收集。直到把所有的金币收集完。但是他们想要得到相同多的金币,请问他们能实现吗?

Input
单组测试数据。 第一行给出一个整数n(1<=n<=30)。 第二行有n个整数p1,p2,p3,…,pn(1<=pi<=9)。
Output
如果有解,输出Yes,否则输出No。
Sample Input
样例输入1
5
9 4 2 8 3
样例输入2
5
3 9 4 2 8
Sample Output
样例输出1
Yes
样例输出2
No
思路:这道题比较水,直接遍历就好了

#include <iostream>
using namespace std;
int main() {
   
	int n,a[100000],i,j;
	int sum1=0,sum2=0;
     cin>>n;
	for(i=0;i<n;i++)
	{
   
	    scanf("%d",&a[i]);
	}
	for(i=0;i<n;i++)
	{
    
	    sum1+=a[i];//循环开始,顺时针只捡一个金币,逆时针全检,然后依次遍历
	    sum2=0;
	  for(j=i+1;j<n;j++)
	  {
    
	     
	     sum2+=a[j];
	  }
	  if(sum1==sum2)
	  {
   
	      printf("YES");
	      break;
	  }
	}
	if
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值