K的倍数

 1 #include<iostream>
 2 #include<fstream>
 3 #include<ctime>
 4 using namespace std;
 5 int main()
 6 {
 7     clock_t start= clock();
 8     ifstream in("makedata.txt");    
 9     int i,j;
10     int n; in>>n;
11     __int64 *sum=new __int64[n+1];
12     sum[0]=0;
13     for(i=1;i<=n;i++)
14     {
15         int temp; in>>temp;
16         sum[i]=sum[i-1]+temp;
17     }
18     int k; in>>k;
19     int len=0;
20     for(i=0;i<n;i++)
21     {
22         for(j=n;j>i+len;j--)
23             if((sum[j]-sum[i])%k==0)
24             {
25                 if((j-i)>len)
26                     len=j-i;
27                 break;
28             }
29         if(len>=(n-i-1))
30             break;
31     }
32     cout<<len<<endl;
33     clock_t end=clock();
34     cout<<"Running Time: "<<(double)(end-start)/CLOCKS_PER_SEC<<endl;
35     return 0;
36 }

注释版:

 1 #include<iostream>
 2 #include<fstream>
 3 #include<ctime>
 4 using namespace std;
 5 int main()
 6 {
 7     //测试运行时间:开始计时
 8     //clock_t start= clock();
 9     ifstream in("makedata.txt");    
10     int i,j;
11     //数据数目
12     int n; in>>n;
13     //长整型的定义与输出与平台有关,不同平台重新修改定义即可
14     __int64 *sum=new __int64[n+1];
15     //为便于处理,设置一个sum[0]
16     sum[0]=0;
17     //sum[i]为第1个到第i个数据的累加和
18     for(i=1;i<=n;i++)
19     {
20         int temp; in>>temp;
21         sum[i]=sum[i-1]+temp;
22     }
23     int k; in>>k;
24     int len=0;
25     for(i=0;i<n;i++)
26     {
27         for(j=n;j>i+len;j--)
28             if((sum[j]-sum[i])%k==0)
29             {
30                 if((j-i)>len)
31                     len=j-i;//更新最大子串长度
32                 break;
33             }
34         if(len>=(n-i-1))
35             break;
36     }
37     cout<<len<<endl;
38     //测试运行时间:结束计时
39     //clock_t end=clock();
40     //输出运行时间
41     //cout<<"Running Time: "<<(double)(end-start)/CLOCKS_PER_SEC<<endl;
42     return 0;
43 }

 

posted on 2017-09-17 14:57  遇一人倾国倾城  阅读(297)  评论(0编辑  收藏  举报

导航