PTA 202X编程训练--循环(28道题)
- **7-1 验证手机号**
- **7-2 含8的数字的个数**
- **7-3 神奇字符串**
- **7-4 支持谁?**
- **7-5 N阶楼梯上楼问题**
- **7-6 自动售货机**
- **7-7 扫雷游戏**
- **7-8 求前n项斐波那契数列之和**
- **7-9 任意位组合新整数(反序)**
- **7-10 4.20-带标题行的九九乘法表**
- **7-11 C程序设计 实验3-5求sinx**
- **7-12 累加a-aa+aaa-aaaa+...**
- **7-13 计算1!+2!+...+n!**
- **7-14 ZY03-循环结构-计算Sin(x)**
- **7-15 输出图形**
- **7-16 sdut-C语言实验-偶数数位求和**
- **7-17 求特殊自然数**
- **7-18 国王的金币**
- **7-19 猴子选大王[加强版]**
- **7-20 因子分解**
- **7-21 C05-07 银行密码验证程序**
- **7-22 字符串中提取数字, ab(78)asd(23)djsf 23**
- **7-23 乘法表,3\*1= 3,乘积结果长度设置为2,结果之间空4格,倒序乘法表,左对齐**
- **7-24 乘法表,3\*1= 3,乘积结果长度设置为2,结果之间空4格,倒序乘法表,右对齐**
- **7-25 数字特征值**
- **7-26 sdut-C语言实验-求某个范围内的所有素数**
- **7-27 sdut -C语言实验 - 水仙花数**
- **7-28 sdut-C语言实验-哥德巴赫猜想**
7-1 验证手机号
题目描述
某系统在新用户注册时必须输入手机号,为了提高系统效率,防止输错手机号,需要对手机号进行验证。
验证规则为:
(1)长度为11位
(2)由数字0~9组成
(3)必须是1开头
以上3个条件同时满足,则验证通过,否则为不通过。
输入格式:
在一行中一个字符串,长度不超过20个字符。
输出格式:
如果验证通过则输出yes,否则输出no。
输入样例:
13812345678
输出样例:
yes
代码内容
#include <stdio.h>
int main()
{
char x[21];
int i,k=0,n=0;
scanf("%s",x);
if(x[10]!='\0'&&x[11]=='\0'&&x[0]=='1')
{
for(i=0;i<21;i++)
{
if(x[i]>='0'&&x[i]<='9')
k=k+1;
}
if(k>=0&&k<11) printf("no\n");
if(k==11) printf("yes");
}
else printf("no\n");
return 0;
}
7-2 含8的数字的个数
题目描述
现代人对数字越来越讲究,都喜欢含有8的数字。现要你编程计算a至b之间的含有数字8的数的个数(比如181,88,8,28这些数都含有数字8,而21,45,49等没有含有数字8)。
输入格式:
在一行中输入两个正整数a和b,用一个空格隔开。0<a<=b<100000。
输出格式:
输出a和b之间含有8的数的个数。包括a和b。
输入样例:
1 30
输出样例:
3
代码内容
#include <stdio.h>
int main()
{
int i,a,b,c=0;
int m,n,d;
scanf("%d%d",&a,&b);
if(a>=1&&a<=b&&b<=1e5)
{
for(i=a;i<=b;i++)
{
d=i;
for(n=0;d>0;)
{
m=d%10;
d=d/10;
if(m==8) n=n+1;
}
if(n!=0) c=c+1;
}
printf("%d",c);
}
return 0;
}
7-3 神奇字符串
题目描述
神奇字符串的定义为: 只含有1和2, 且将其按照连续的1和2拆开后,对应的每部分数字数量恰好和原字符串相同
例如: 1 22 11 2 1 22 1 22 11 2 11 22 … 每部分对应的1和2个数为
1 2 2 1 1 2 1 2 2 1 2 2 … 恰好等于原串
现给定N,求神奇串的前N位中有多少个1 .
输入格式:
第一行输入一个T,代表数据组数
接下来的T行,输入N
1 <= N <= 100000
输出格式:
对每一组输入,在一行中输出前N位中1的个数。
输入样例:
1
6
输出样例:
3
代码内容
#include<stdio.h>
int main()
{
int N,T,n,i,j,k=0;
scanf("%d",&T);
for(n=0; n<T;n++)
{
scanf("%d", &N);
char s[100001]="122";
char a[100001]="12";
for(i=3,j=2;i<N;i++,j++)
{
a[j]=s[j];
if(a[j]=='2')
{
if(s[i-1]=='2')
{
s[i]='1';
s[i+1]='1';
i=i+1;
}
else
{
s[i]='2';
s[i+1]='2';
i=i+1;
}
}
else
{
if(s[i-1]=='2')
s[i]='1';
else s[i]='2';
}
}
for(i=0;i<N;i++)
if(s[i]=='1') k++;
printf("%d\n",k);
}
return 0;
}
7-4 支持谁?
题目描述
小蓝和班里的同学都迷上了看电视剧《西游记》。由于欣赏角度不同,有的同学喜欢孙悟空;有的同学喜欢唐僧;有的同学则喜欢猪八戒,大家经常为此争吵。小蓝心想,到底我们班里喜欢谁的各有多少人呢?我来做一个统计调查吧。于是她约定:喜欢孙悟空的选A,喜欢唐僧的选B,喜欢猪八戒的选C。然后让全班同学来投票。同学们很认真地填写,并投票。当然,有可能有少数同学故意恶作剧,填了A、B、C之外的其它字母。如果出现这种情况,这张票就算作废。小蓝班上的同学很多,统计票是一件辛苦又容易出错的事情。请你写个程序,帮小蓝快速而准确地统计出结果吧。
输入格式:
第1行:1个整数N(1<=N<=100),表示小明班的人数
第2行:N个大写字母,表示小明班上每个同学投的票
输出格式:
3个整数,中间用一个空格分开,分别表示填A、填B和填C的人数。
输入样例:
10
AABACCBBDB
输出样例:
3 4 2
代码内容
#include <stdio.h>
int main()
{
int N,n;
scanf("%d",&N);
n=N+1;
char x[n];
int i,a=0,b=0,c=0;
scanf("%s",x);
for(i=0;i<n;i++)
{
if(x[i]=='A') a=a+1;
if(x[i]=='B') b=b+1;
if(x[i]=='C') c=c+1;
}
printf("%d %d %d",a,b,c);
return 0;
}
7-5 N阶楼梯上楼问题
题目描述
N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式。例如,当楼梯只有一阶时,只有一种方法;当楼梯有两阶时,可以每次跨一阶,跨两次,也可以每次跨两阶,跨一次,因此有两种方法。
输入格式:
输入包括一个整数N,(1<=N<46)。
输出格式:
输出当楼梯阶数是N时的上楼方式总数。
输入样例1:
3
输出样例1:
3
输入样例2:
4
输出样例2:
5
代码内容
#include <stdio.h>
int main()
{
long long int a[46];
int n,i;
scanf("%d",&n);
a[1]=1,a[2]=2;
for(i=3;i<46;i++)
a[i]=a[i-1]+a[i-2];
printf("%lld\n",a[n]);
return 0;
}
7-6 自动售货机
题目描述
如图所示的简易自动售货机,物品架1、2上共有10样商品,按顺序进行编号分别为1-10,标有价格与名称,一个编号对应一个可操作按钮,供选择商品使用。如果物架上的商品被用户买走,储物柜中会自动取出商品送到物架上,保证物品架上一定会有商品。用户可以一次投入较多钱币,并可以选择多样商品,售货机可以一次性将商品输出并找零钱。
用户购买商品的操作方法是:
(1)从“钱币入口”放入钱币,依次放入多个硬币或纸币。钱币可支持1元(纸币、硬币)、2元(纸币)、5元(纸币)、10元(纸币),放入钱币时,控制器会先对钱币进行检验识别出币值,并统计币值总额,显示在控制器显示屏中,提示用户确认钱币放入完毕;
(2)用户确认钱币放入完毕,便可选择商品,只要用手指按对应商品外面的编号按钮即可。每选中一样商品,售货机控制器会判断钱币是否足够购买,如果钱币足够,自动根据编号将物品进行计数和计算所需钱币值,并提示余额。如果钱币不足,控制器则提示“Insufficient money”。用户可以取消购买,将会把所有放入钱币退回给用户。
输入格式:
先输入钱币值序列,以-1作为结束,再依次输入多个购买商品编号,以-1结束。
输出格式:
输出钱币总额与找回零钱,以及所购买商品名称及数量。
输入样例:
1 1 2 2 5 5 10 10 -1
1 2 3 5 1 6 9 10 -1
输出样例:
Total:36yuan,change:19yuan
Table-water:2;Table-water:1;Table-water:1;Milk:1;Beer:1;Oolong-Tea:1;Green-Tea:1;
代码内容
#include<stdio.h>
int main()
{
char x[10][13]={
"Table-water","Table-water","Table-water","Coca-Cola","Milk","Beer","Orange-Juice","Sprite","Oolong-Tea","Green-Tea"};
int n[10],i;
int a,b=0,c,p,d=0,e;
for(i=0;i<10;i++)
n[i]=0;
while(1)
{
scanf("%d",&a);
if(a==1||a==2||a==5||a==10) b=b+a;
if(a==-1) break;
}
while(2)
{
scanf("%d",&c);
if(c!=-1)
{
switch(c)
{
case 1:p=1,n[0]++;break;
case 2:p=1,n[1]++;break;
case 3:p=1,n[2]++;break;
case 4:p=2,n[3]++;break;
case 5:p=2,n[4]++;break;
case 6:p=3,n[5]++;break;
case 7:p=3,n[