pascal循环结构 求所有7的倍数和

描述 Description 前n个自然数中,能被7整除的所有整数之和s。
输入格式 Input Format 只有一行且只有一个正整数:n

30%的数据范围<=10的5次方
100%的数据范围<=10的9次方
输出格式 Output Format 只有一行且只有一个正整数:s
样例输入 Sample Input 20样例输出 Sample Output 21时间限制 Time Limitation 各个测试点1s

被lz召唤来了…………
考虑到n<=10^9且时限为1s,不能直接循环1~n,那样会超时的
由于7的倍数才能被整除,所以和为7+14+21+……,这是一个等差数列
首项为7,公差为7,易得项数为n div 7,末项即为7+7*(n div 7-1)=7*(n div 7)
所以直接可以套等差数列求和公式
注意,要考虑在运算过程中的溢出,用qword来定义n(lz可以试一下n=10^9的情况,运算是大于longint的范围的)
所以其他两位童鞋又错了……
var
n:qword;
begin
readln(n);
writeln((7+7*(n div 7))*(n div 7) shr 1);
end.

满意望采纳谢谢!~追问

还是过不了啊,var m,n,s,k:int64;
begin
readln(n);
m:=n div 7;
if odd(m) then k:=((m+1) div 2)*m
     else k:=(m div 2)*(m+1);
s:=k*7;
writeln(s);
end.
这个哪错了

追答

公式错了……你看看我的公式~
理解不了为什么你要分奇偶讨论咯~

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-29
var
n,j;
begin
read(n);
j:=n div 7;
writeln((j+1)*j div 2*7);
end.

思路:高斯求和
设j=n div 7;
由题可得,最终答案=7*1+7*2+7*3+...7*j=7*(1+2+3+4+...j)
即为高斯求和
P.S.:我是直接在这里手打的,可能会有语法错误请见谅
第2个回答  2013-04-29
var
i,s,n:longint;;
begin
read(n);
for i:=1 to n do
if i mod 7=0 then s:=s+i;
writeln(s);
end.
望楼主采纳,如果有什么问题可以问我

pascal循环结构 求所有7的倍数和
考虑到n<=10^9且时限为1s,不能直接循环1~n,那样会超时的 由于7的倍数才能被整除,所以和为7+14+21+……,这是一个等差数列 首项为7,公差为7,易得项数为n div 7,末项即为7+7*(n div 7-1)=7*(n div 7)所以直接可以套等差数列求和公式 注意,要考虑在运算过程中的溢出,用qwor...

用pascal编求出1—100的5的倍数或7的倍数的和
很多种方法,在下列举3种,一种for循环做,一种while循环做,还有一种repeat循环做,因为题目要求是5或7的倍数,那么我就都写成是5的倍数,完了后楼主自己把5改成7就行了,代码如下:\/\/1 for循环 var i,ans:longint;begin ans:=0;for i:=1 to 100 do if i mod 5=0 then ans:=ans+i...

pascal 各位数字之和等于7的倍数
program exe;var z,i,s,n:integer;begin (z:=0;)for i:=1 to 10000 do begin s:=0;n:=i;repeat s:=s+n mod 10;n:=n div 10;until n=0;if s mod 7=0 then begin write(i:6);(z:=z+1;if z mod 10=0 then writeln;)end;end;end.打()处是为了输出美观,可有可...

...数字之和为7的倍数则输出‘YES’,否则输出‘NO’ Turbo pascal...
var st:string;s,i,l:longint;begin readln(st);l:=length(st);for i:=1 to l do s:=s+ord(st[i])-48;if s mod 7=0 then writeln('YES')else writeln('NO');end.

求助:这个pascal程序哪里出错了
好像single是VB中的一个类型吧,在pascal中没有这个吧。其他的语法错误应该没了,“f:=0;”这里的分号应该是楼主自己打错了吧。最后只想问一下楼主这个程序是什么意思?上面定义判断素数的函数,然后下面的for循环中先判断i是否mod 6=1 ,也就是判断它是否是7的倍数,然后在判断素数又有何意义呢?

PASCAL语句中的一个问题,麻烦知道的帮下忙
while j<=m do \/\/这个循环是把集合si中所有x的倍数删掉 begin si:=si-[j];j:=j+x;end;until si=[ ]; \/\/直到循环si为空结束 例如:m=10 循环第一次, x=2 删除2 4 6 8 10 pr={2} si={3,5,7,9} 循环第二次,x=3,删除3,9 pr={2,3} si={5,7} 循环第...

输入两个整数n,i,求0~n范围内i所有的倍数的和(pascal)
var N, i, j, sum : longint(integer亦可);begin readln(N,i);sum := 0;for j := 0 to N do begin if j mod i = 0 then sum := sum + j;end;writeln(sum);end.

用pascal求这一年中每个月的13号是星期几
n天后是星期几怎么算呢?现在假设n是7的倍数,如果n为14,那么刚好就过了两个星期,所以14天后仍然是星期一。但如果是过了15天,那么推算就得到是星期二。这样,我们就可以推导出一个公式来计算。(n天 mod 7(一个星期的天数)+ 现在日期的代号) mod 7 就等于现在日期的代号。当括号内的值为7...

pascal:一个6位数的2,3,4,5,6倍仍然是6位数,而且它们都由原数的6个数 ...
1.循环出数。2.把原数字分离导入数组并排序。3。判断各个倍数。4.输出结果 以上是一级算法;其中2需要求精;1,通过数组个字符串的处理可以分离数;2,通过一个变量导入数;3,分离数的每一位,导入数组并排序;4,比较每一位(用循环来做),如果成功,输出结果,否则continue(继续);好了,用...

一道Pascal小问题,急!!!
③将next的所有倍数从筛中筛去; ④重复②~④直到筛空。 编程时,用集合变量sieve表示筛子,用集合primes存放所有素数。 源程序如下: program ex10_3; const n=200; var sieve,primes:set of 2..n; next,j:integer; begin sieve:=[2..n];{将所有候选数放入筛中} primes:=[];{素数集合置空} next...

相似回答
大家正在搜