• 每日一小练——等值首尾和


    上得厅堂,下得厨房。写得代码,翻得围墙。欢迎来到睿不可挡的每日一小练。


    题目:等值首尾和


    内容:
    如果有一个数组x[],它有n个元素,每个都大于零;称x[0]+x[1]+...+x[i]为前置和,而x[j]+x[j+1]+...+x[n-1]为后置
    和。试编写一个程序。求出x[]中有多少组同样的前置和后置和。

    比如:x[]的元素是3,6,2,1,4,5,2,于是x[]的前置和有下面7个,即3,9,11,12,16,21,23;后置和则2,7,11,12,14,20,23;

    于是11,12,23,这3对就是值同样的前置和与后置和。


    我的解法:上来没多想,打开vs2013就敲了起来,问题果然非常easy,分分钟就超神。。

    奥。不正确就攻克了!事实上这个系列一直着重练习数组索引的技巧,通过这些技巧能够减少算法的时间复杂度,嘿嘿,这种练习就要告一段落了,明天開始就是新的旅程了!加油!


    #include <iostream>
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	int numOfSameSum(int x[], int x_Length);
    	int x[7] = { 3, 6, 2, 1, 4, 5, 2 };
    	int num = numOfSameSum(x, 7);
    	cout << "等值首尾和的个数为:" << num << endl;
    	getchar();
    	return 0;
    }
    
    int numOfSameSum(int x[], int x_Length)
    {
    	int begin_Index = 0;
    	int end_Index = x_Length - 1;
    	int begin_Sum = x[begin_Index];
    	int end_Sum = x[end_Index];
    	int sameSum = 0;
    	while (begin_Index < x_Length && end_Index >= 0)
    	{
    		if (begin_Sum == end_Sum)
    		{
    			sameSum++;
    			begin_Index++;
    			end_Index--;
    			begin_Sum += x[begin_Index];
    			end_Sum += x[end_Index];
    		}
    		else if (begin_Sum > end_Sum)
    		{
    			end_Index--;
    			end_Sum += x[end_Index];
    		}
    		else
    		{
    			begin_Index++;
    			begin_Sum += x[begin_Index];
    		}
    		
    	}
    	return sameSum;
    }
    

    实验结果:




    欢迎大家增加每日一小练,嘿嘿!

    每天练一练。日久见功夫,加油!


                -End-

    參考文献:《c语言名题精选百则》



  • 相关阅读:
    在谷歌地图上绘制行政区域轮廓【结合高德地图的API】
    用PL/SQL远程连接Oracle服务器
    找工作之离职篇
    linux设置定时备份mysql数据库
    使用NoSQL实现高并发CRM系统实践(源代码+解析)
    做领导应该注意的几个问题
    如何才能成为真正的程序员
    利用websocket实现手机扫码登陆后,同步登陆信息到web端页面
    利用laravel-echo主动向服务端发送消息,实现在线状态管理
    飞鱼CRM
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/6850175.html
Copyright © 2020-2023  润新知