首页 > 试题广场 >

整数和

[编程题]整数和
  • 热度指数:7166 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
编写程序,读入一个整数N。若N为非负数,则计算N 到2N 之间的整数和;若N为一个负数,则求2N 到N 之间的整数和。

输入描述:
第一行表示样例数m,接下来m行每行一个整数N,N的绝对值不超过100。


输出描述:
输出m行,每行表示对应的题目所求。
示例1

输入

2
2
-1

输出

9
-3

备注:
注意N可能为负数
importjava.util.Scanner;
publicclassMain {
    publicstaticvoidmain(String[] args) {
         Scanner scanner=newScanner(System.in);
             intz=scanner.nextInt();
            // int ns=0;
             intcount=0;
             int[] k=newint[20];
             for(intj=0;j<=z-1;j++){
                 intN=scanner.nextInt();
                 if(N>=0){
                      for(inti=N;i<=(2*N);i++){
                           count+=i;
                        }
                    }else{
                        for(inti=(2*N);i<=N;i++){
                            count+=i;
                        }
                    }
                 k[j]=count;
                 count=0;
             }
              
             for(inti=0;i<z;i++){
                 System.out.println(k[i]);
             }
            }
}
发表于 2019-04-17 21:13:00 回复(1)
#include<iostream>
usingnamespacestd;
intmain(){
    intn,m;
    cin>>n;
    for(int i=0;i<n;i++) {
        cin>>m;
    if(m>0)
        cout<<(m+m*2)*(m+1)/2<<endl;
    else
  cout<<(m+m*2)*(m-m*2+1)/2<<endl;
    }
    return0;
}
发表于 2019-04-17 21:18:18 回复(1)
#include <iostream>
#include <cmath>
using namespace std;
int sum_all(int n)
{
    int items;
    items = abs(2*n-n)+1;
    return (n+2*n)*items/2;
}
int main()
{
    int m;
    cin >> m;
    int tmp[500];
    for(int i = 0; i < m; i++)
        cin >> tmp[i];
    for(int i = 0; i < m; i++)
        cout << sum_all(tmp[i]) << endl;
    return 0;
}
发表于 2019-03-16 10:36:23 回复(0)
还是不够简洁啊😂
#include<iostream>
using namespace std;
int main(){
    int m,n;
    cin>>m;
    while(m>0){
        cin>>n;
        int total=0;
        if(n>0){
            for(int i=n;i<=2*n;i++)
                total+=i;
        }
        else{
            for(int i=2*n;i<=n;i++)
                total+=i;
        }
        cout<<total<<endl;
        m--;
    }
}

发表于 2019-03-01 00:01:10 回复(0)
用等差数列求和公式,时间复杂度为O(1)
#include <bits/stdc++.h>

using namespace std;

int main()
{
    int m,n;
    cin>>m;
    while(m--)
    {
        cin>>n;
        int left=n>0?n:2*n;
        int right=n>0?2*n:n;
        cout<<(right-left+1)*(left+right)/2<<endl;
    }
    return 0;
}


发表于 2020-01-30 10:53:45 回复(1)

python解法

求出N+N+1+……+2N的结果,并用公式表示。

for i in range(int(input())):
    n = int(input())
    print(3 * n * (abs(n) + 1) // 2)
发表于 2019-04-03 22:57:11 回复(0)
注意0! 0! 0!也要换行
#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main() {
    
    int n, x,sum=0;
    scanf("%d", &n);
    while (n>0)
    {
        scanf("%d", &x);
        if (x == 0)
        {
            printf("0\n");
        }
        else if (x > 0)
        {
            printf("%d\n", (x + 1) * (x + (2 * x)) / 2);
        }
        else
        {
            printf("%d\n", -(x - 1) * (x + (2 * x)) / 2);
        }
        n--;
    }
     

    return 0;
}
编辑于 2024-03-01 19:33:19 回复(0)
题解写的都怪怪的,等差数列求和就行
#include <cstdio>
#include <iostream>
using namespace std;

int Sum(int b){
    return (b+2*b)*(b+1)/2;
}

int main() {
    int a, b;
    cin >> a;
    for (int i = 0; i < a; i++) {
        cin >> b;
        if (b>=0) {
            printf("%d\n",Sum(b));
        }
        else {
            printf("%d\n",-Sum(-b));
        }
    }
    return 0;
}


编辑于 2024-02-09 21:20:38 回复(0)
#include <iostream>
using namespace std;

int main() {
    int m, n;
    cin >> m;
    while (m--) {
        cin >> n;
        int sum = 0;
        for (int i = n; n > 0 ? i <= 2 * n : i >= 2 * n; n > 0 ? i++ : i--) {
            sum += i;
        }
        cout << sum << endl;
    }
    return 0;
}

发表于 2024-01-28 21:27:47 回复(0)
#include <cstdio>

int main(){
    int m,n;
    scanf("%d",&m);
    while(scanf("%d",&n) != EOF){
        if(n>0){
            int sum = 0 , i = n;
            while(i <= 2*n){
                sum += i;
                i++;
            }
            printf("%d\n",sum);
        }else{ //n<0
            int sum = 0, i =  n;
            while(i >= 2*n){
                sum += i;
                i--;
            }
            printf("%d\n",sum);
        }
    }
    return 0;
}

发表于 2023-03-24 15:43:53 回复(0)
使用绝对值统一计算项数个数
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    int n;
    cin >> n;
    while(n--){
        int m;
        cin >> m;
        int sum = 3 * m * (abs(m) + 1) / 2;
        cout << sum << endl;
    }
}


发表于 2022-05-14 12:35:19 回复(0)
#include<iostream>
#include<vector>
using namespace std;
int sum(int n)
{
    int y = 0;
    if(n >= 0)
        for(int i = n;i <= 2 * n;i++)
            y += i;
    else
        for(int i = 2 * n;i <= n;i++)
            y += i;
    return y;
}

int main(void)
{
    int m;
    
    while(cin >> m)
    {
        vector<int> arr;
        while(m--)
        {
            int x;
            cin >> x;
            arr.push_back(x);
        }
        
        for(vector<int>::iterator it = arr.begin();it != arr.end();it++)
            cout << sum(*it) << endl;
    }
    return 0;
}

发表于 2022-02-06 16:46:10 回复(0)
#include<stdio.h>
#include<stdlib.h>
int _Nto2N(int n){
	int sum=0;
	for(int i=n;i<=2*n;i++)
		sum+=i;
	return sum;
}

int _2NtoN(int n){
	int sum=0;
	for(int i=2*n;i<=n;i++)
		sum+=i;
	return sum;
}

int main(){
	int n;
	while(scanf("%d",&n)!=EOF){
		int *num=(int *)malloc(sizeof(int)*n); //num存储要操作的整数
		for(int i=0;i<n;i++){
			int temp;
			scanf("%d",&temp);
			num[i]=temp;
		}
		for(int j=0;j<n;j++){
			if(num[j]>=0){
				printf("%d",_Nto2N(num[j]));
				printf("\n");
			}
			else
			{
				printf("%d",_2NtoN(num[j]));
				printf("\n");
			}
		}	
	}
}

发表于 2022-01-10 13:23:31 回复(0)
直接带公式,n*(n+1)+n*(n+1)/2=3*n*(n+1)/2
#include<iostream>
using namespace std;
 
int main()
{
    int m,n;
    cin>>m;
    while(m--)
    {
        cin>>n;
        int a=abs(n);
        if(n<0)
            cout<<"-";
        cout<<3*a*(a+1)/2<<endl;
    }
    return 0;
}


发表于 2021-02-23 16:54:37 回复(0)
#include<iostream>
using namespace std;
int main()
{
    int m;
    cin>>m;
    while(m--)
    {
        int N;
        cin>>N;
        int sum=0;
        if(N>=0) // N 非负
        {
            for(int i=N;i<=2*N;i++)
                sum=sum+i;
            cout<<sum<<endl;
        }
        else{ // f负数
            for(int i=-N;i<=-2*N;i++)
                sum=sum+i;
            cout<<-sum<<endl;
         }
        
        
    }
    return 0;
}
发表于 2021-02-23 10:14:03 回复(0)
#include<stdio.h>
int sum(int x)
{
	int sum=0,i;
	if(x==0) sum=0;
	if(x>0)
	for(i=x;i<=2*x;i++)
	sum=sum+i;
	if(x<0)
	for(i=2*x;i<=x;i++)
	sum=sum+i;
	return sum;
}
int main()
{
	int m,N[1000],i;
	scanf("%d",&m);
	for(i=0;i<m;i++)
	scanf("%d",&N[i]);
	for(i=0;i<m;i++)
	printf("%d\n",sum(N[i]));
	return 0;
}

发表于 2020-06-06 18:03:34 回复(0)
//1.判断正负
//2.累加过程注意范围
#include<stdio.h>
int main()
{
    int m,N,i,j,sum;
    scanf("%d",&m);
    for(i=1;i<=m;i++)
    {
        scanf("%d",&N);
        sum=0;
        if(N>=0)//大于0时
        {
            for(j=N;j<=2*N;j++)
            {
              sum+=j;
            }
        }else{//小于0时
            for(j=2*N;j<=N;j++)
            {
                sum+=j;
            }
        }
        printf("%d\n",sum);
    }
    return 0;
}

发表于 2020-05-09 16:16:21 回复(0)
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int m;
    while(~scanf("%d", &m))
    {
        int i, n, from, to, sum;
        for(i = 0; i < m; i++)
        {
            sum = 0;
            scanf("%d", &n);
            if(n < 0)
            {
                from = 2 * n;
                to   = n    ;
            }
            else
            {
                from = n    ;
                to   = 2 * n;
            }
            for(int j = from; j <= to; j++)
                sum += j;
            printf("%d\n", sum);
        }
    }

    return 0;
}

编辑于 2020-04-02 22:49:57 回复(0)
Java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        for (int k = 0; k < n; k++) {
            int i = scanner.nextInt();
            int sum = 0;
            if (i>=0) for (int j = i; j <=2*i ; j++) sum+= j;
            else for (int j = 2*i; j <=i ; j++) sum+= j;
            System.out.println(sum);
        }
    }
}


发表于 2020-03-19 22:09:42 回复(0)
#include<stdio.h>
int main()
{
    int n,m,i,sum;
    scanf("%d",&m);
    while(m--)
    {
        sum=0;
        scanf("%d",&n);
        if(n>=0)
        {
            for(i=n;i<=2*n;i++)
                sum+=i;
        }
        else
        {
            for(i=2*n;i<=n;i++)
                sum+=i;
        }
        printf("%d\n",sum);
    }
}
发表于 2020-02-10 14:00:48 回复(0)

问题信息

上传者:小小
难度:
44条回答 3852浏览

热门推荐

通过挑战的用户

查看代码