PAT乙级 1056 组合数的和

1056. 组合数的和(15)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

给定N个非0的个位数字,用其中任意2个数字都可以组合成1个2位的数字。要求所有可能组合出来的2位数字的和。例如给定2、5、8,则可以组合出:25、28、52、58、82、85,它们的和为330。

输入格式:

输入在一行中先给出N(1<N<10),随后是N个不同的非0个位数字。数字间以空格分隔。

输出格式:

输出所有可能组合出来的2位数字的和。

输入样例:
3 2 8 5
输出样例:
  330
    读题关键点:不同,非0,N个(N小于10)
思路1:共n个数字,每个数字出现在个位或十位的次数是n-1,且和是10+1=11
则有每个数字贡献给最终和的值是:num*(n-1)*(10+1)
 1 #include <stdio.h>
 2 int main(){
 3     int n,i,a[10],sum=0;
 4     scanf("%d",&n);
 5     for(i=0;i<n;i++){
 6         scanf("%d",&a[i]);
 7         sum+=a[i];
 8     }
 9     sum*=n-1;
10     printf("%d",sum*11);
11     return 0;
12 }

     思路2:两个for循环将每两个数分别当作十位和个位,全部相加即可

 1 #include <stdio.h>
 2 int main(){
 3   int i,j,n,a[10];
 4   int sum,k;
 5   scanf("%d",&n);
 6   for(i=0;i<n;i++)
 7     scanf("%d",&a[i]);
 8     for(i=0;i<n;i++){
 9       for(j=i+1;j<n;j++){
10         sum+=a[i]*10+a[j]+a[j]*10+a[i];
11       }
12     }
13     printf("%d",sum);
14   return 0;
15 } 

 


posted @ 2016-11-24 14:17  琉生  阅读(947)  评论(0)    收藏  举报