7-39 数列求和-加强版
分数 20
全屏浏览题目
切换布局
作者 DS课程组单位 浙江大学
给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯A(N个A)。例如A=1, N=3时,S=1+11+111=123。
输入格式:
输入数字A与非负整数N。
输出格式:
输出其N项数列之和S的值。
输入样例:
1 3
输出样例:
123
代码
#include<stdio.h>
int main(){
int k,n;
scanf("%d%d",&k,&n);
int a[100005]={0};
if(n==0)printf("0");
int i,temp=0;
for(i=0;i<n;i++){
a[i]=((n-i)*k+temp)%10;
temp=((n-i)*k+temp)/10;
}
if(temp!=0)
printf("%d",temp);
for(i=n-1;i>=0;i--)printf("%d",a[i]);
return 0;
}
7-32 数组元素循环右移问题
分数 20
全屏浏览题目
切换布局
作者 DS课程组单位 浙江大学
一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A0A1⋯AN−M−1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
输入格式:
每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。
输出格式:
在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。
输入样例:
6 2
1 2 3 4 5 6
输出样例:
5 6 1 2 3 4
代码
#include<stdio.h>
int main()
{
int m,n;
scanf("%d %d",&m,&n);
int a[m];
for(int i=0;i<m;i++)
{
scanf("%d",&a[i]);
}
n%=m;
for(int i=0;i<m;i++)
{
printf("%d",a[(m-n+i)%m]);
if(i!=m-1)printf(" ");
}
return 0;
}
7-18 到底有多二
分数 15
全屏浏览题目
切换布局
作者 陈越单位 浙江大学
一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336是个11位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:3/11×1.5×2×100%,约为81.82%。本题就请你计算一个给定整数到底有多二。
输入格式:
输入第一行给出一个不超过50位的整数N。
输出格式:
在一行中输出N犯二的程度,保留小数点后两位。
输入样例:
-13142223336
输出样例:
81.82%
代码
#include<stdio.h>
#include<string.h>
int main() {
char s[55];
scanf("%s", s);
int len = strlen(s);
int i, cnt;
double p1, p2;
p1 = p2 = 1.0;
if (s[0] == '-')
p1 = 1.5;
if ((s[len - 1] - '0') % 2 == 0)
p2 = 2.0;
for (i = cnt = 0; s[i]; i++)
if (s[i] == '2')
cnt++;
if (p1 == 1.0)
printf("%.2f%%", 1.0 * cnt / len * p1 * p2 * 100);
else
printf("%.2f%%", 1.0 * cnt / (len - 1) * p1 * p2 * 100);
return 0;
}
7-11 兔子繁衍问题
分数 15
全屏浏览题目
切换布局
作者 徐镜春单位 浙江大学
一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?
输入格式:
输入在一行中给出一个不超过10000的正整数N。
输出格式:
在一行中输出兔子总数达到N最少需要的月数。
输入样例:
30
输出样例:
9
代码
#include<stdio.h>
int main(){
int a=1,b=1,s=2,n,m=3;
scanf("%d",&n);
if(n==1)printf("1");
else{
while(s<n){
m++;
a=b;
b=s;
s=s+a;
}
printf("%d",m);
}
return 0;
}
打印沙漏
分数 20
全屏浏览题目
切换布局
作者 陈越单位 浙江大学
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
输出样例:
*****
***
*
***
*****
2
代码1(废
#include<stdio.h>
int row(int n);
int num(int n,int r);
int main(void){
int n,r,count;
int i,j;
char ch;
scanf("%d %c",&n,&ch);
r=row(n);
for(i=1;i<=r;i++){
for(j=1;j<i;j++)
printf(" ");
for(j=1;j<=2*r-2*i+1;j++)
printf("%c",ch);
printf("\n");
}
for(i=2;i<=r;i++){
for(j=1;j<=r-i;j++)
printf(" ");
for(j=1;j<=2*i-1;j++)
printf("%c",ch);
printf("\n");
}
count=num(n,r);
printf("%d",count);
return 0;
}
int row(int n){
int r;
n=(n+1)/2;
for(r=1;n>=0;r++)
n=n-2*r+1;
return r-2;
}
int num(int n,int r){
int i;
n--;
for(i=2;i<=r;i++){
n=n-4*i+2;
}
return n;
}
代码2
#include <stdio.h>
#include <math.h>
int main()
{
int n;
char c;
scanf("%d %c", &n, &c);
int h = sqrt((n + 1) / 2);
for (int i = 0; i < h; i++)
{
for (int j = 0; j < i; j++)
printf(" ");
for (int j = 0; j < 2 * (h - i) - 1; j++)
printf("%c", c);
printf("\n");
}
for (int i = 2; i <= h; i++)
{
for (int j = 0; j < h - i; j++)
printf(" ");
for (int j = 0; j < 2 * i - 1; j++)
printf("%c", c);
printf("\n");
}
printf("%d", n - 2 * h * h + 1);
return 0;
}
7-4 杨辉三角
分数 10
全屏浏览题目
切换布局
作者 王跃萍单位 东北石油大学
打印n行杨辉三角,n<10。
输入格式:
直接输入一个小于10的正整数n。
输出格式:
输出n行杨辉三角,每个数据输出占4列。
输入样例:
5
输出样例:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
代码
#include <stdio.h>
#include <stdlib.h>
int main(){
int s=1,h;
int i,j;
scanf("%d",&h);
printf(" 1\n");
for (i=2;i<=h;s =1,i++){
printf(" 1");
for (j=1;j<=i-2; j++)
printf("%4d",(s=(i-j)*s/j));
printf(" 1\n");
}
getchar();
return 0;
}
L1-020 帅到没朋友
当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为太帅而没有朋友。本题就要求你找出那些帅到没有朋友的人。
输入格式:
输入第一行给出一个正整数N(≤100),是已知朋友圈的个数;随后N行,每行首先给出一个正整数K(≤1000),为朋友圈中的人数,然后列出一个朋友圈内的所有人——为方便起见,每人对应一个ID号,为5位数字(从00000到99999),ID间以空格分隔;之后给出一个正整数M(≤10000),为待查询的人数;随后一行中列出M个待查询的ID,以空格分隔。
注意:没有朋友的人可以是根本没安装“朋友圈”,也可以是只有自己一个人在朋友圈的人。虽然有个别自恋狂会自己把自己反复加进朋友圈,但题目保证所有K超过1的朋友圈里都至少有2个不同的人。
输出格式:
按输入的顺序输出那些帅到没朋友的人。ID间用1个空格分隔,行的首尾不得有多余空格。如果没有人太帅,则输出No one is handsome。
注意:同一个人可以被查询多次,但只输出一次。
输入样例1:
3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
8
55555 44444 10000 88888 22222 11111 23333 88888
输出样例1:
10000 88888 23333
输入样例2:
3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
4
55555 44444 22222 11111
输出样例2:
No one is handsome
代码
#include<stdio.h>
int main(void){
int n,i,j,k,m,flag=1;
static int peo[100000],p;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&k);
for(j=0;j<k;j++){
scanf("%d",&p);
if(k>1)peo[p]++;
}
}
scanf("%d",&m);
for(i=0;i<m;i++){
scanf("%d",&p);
if(peo[p]==0){
peo[p]++;
if(flag)printf("%05d",p);
else printf(" %05d",p);
flag=0;
}
}
if(flag)printf("No one is handsome\n");
return 0;
}
7-25 正整数A+B
分数 15
全屏浏览题目
切换布局
作者 陈越单位 浙江大学
题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。
输入格式:
输入在一行给出A和B,其间以空格分开。问题是A和B不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。
注意:我们把输入中出现的第1个空格认为是A和B的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。
输出格式:
如果输入的确是两个正整数,则按格式A + B = 和输出。如果某个输入不合要求,则在相应位置输出?,显然此时和也是?。
输入样例1:
123 456
输出样例1:
123 + 456 = 579
输入样例2:
22. 18
输出样例2:
? + 18 = ?
输入样例3:
-100 blabla bla...33
输出样例3:
? + ? = ?
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
int n;
ll a,b,x,y,gcd,lcm,f = 1;
scanf("%d" ,&n);
scanf("%lld/%lld", &a,&b);
for(int i = 1; i < n; i ++)
{
scanf("%lld/%lld", &x,&y);
a *= y;
x *= b;
a = a + x;
b = b * y;
if(a < 0) a = -a, f = -1;
else f = 1;
gcd = __gcd(a,b);
a /= gcd;
b /= gcd;
a *= f;
}
if(b == 1) {
printf("%lld\n",a);
}
else if(a > b){
printf("%lld %lld/%lld\n",a / b, a % b , b);
}
else {
printf("%lld/%lld\n",a,b);
}
return 0;
}