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 }