PTA - 基础编程题目集
C语言练习
懒狗的救赎
HUMBLE.
展开
-
7-38 数列求和-加强版 (20分)【详细分析】
分析:// n...76543210 //数组的每一位是a的累加// // 9// 99// 999// 9999// 99999// n...76543210代码:#include <stdio.h>int main(){ int a,n,num[200000]={0},t,j; scanf("%d %d",&a,&n); if(n!=0){ for(int i=0;i<n;i+原创 2021-01-23 22:39:54 · 175 阅读 · 0 评论 -
7-37 整数分解为若干项之和 (20分)
DFS方法:#include<stdio.h>int flag = 0, n, a[30];void dfs(int len, int pos, int next){ if (pos + next > n)return; //如果值大于N就没有继续的必要了 a[len++] = next; //保存路径 if (pos+next == n){ printf("原创 2021-01-23 20:17:56 · 292 阅读 · 0 评论 -
7-36 复数四则运算 (15分)【超级详细解析】
#include <stdio.h>#include <math.h>double a1,b1,a2,b2; //使用double,可以使小数之间的计算更加精确double a3,b3;void show(char c){ //打印式子 int tag=0; if(a1!=0||b1!=0){ printf("(%0.1lf",a1); if(b1>=0) printf("+"); printf("%0.1lfi",b1); pr原创 2021-01-22 22:34:49 · 2887 阅读 · 0 评论 -
7-35 有理数均值 (20分)
#include <stdio.h>void simple(int *a,int *b);int main(){ int n,up=0,down=1; //up分子,down分母 scanf("%d",&n); int a,b; //输入时,a分子,b分母 for(int i=0;i<n;i++){ scanf("%d/%d",&a,&b); up=up*b+a*down; down=b*down; simple(&up原创 2021-01-22 20:02:33 · 130 阅读 · 0 评论 -
7-32 说反话-加强版 (20分)【超级详细注释版】
#include <stdio.h>#include <string.h>int main(){ int len,k=0,tag; //tag为标记位 char c[500001]={0}; gets(c); len=sizeof(c); //sizeof()比strlen()多一位‘\n’ for(int i=0;i<len;i++){ //将原字符串多余空格删除,保证每个单词间只有一个空格; i原创 2021-01-18 23:01:21 · 1854 阅读 · 1 评论 -
7-31 字符串循环左移 (20分)【两种方法】
字符串函数法:#include <stdio.h>#include <string.h>int main(){ int n = 0; char c[101]={0},t[101]={0}; gets(c); //gets()函数可输入空格,回车键为结束的标志,且回车符不计入数组中 scanf("%d",&n); n%=strlen(c); //n大于字符串长度取余,减小冗余的循环移动 strcpy(t,原创 2021-01-18 22:10:21 · 256 阅读 · 0 评论 -
7-30 字符串的冒泡排序 (20分)
分析:初: 6 2 best cat east a free day第一次: best cat a east day free第二次: best a cat day east free由大到小向右边冒泡结构体法:#include <stdio.h>#include <string.h>struct str{ //定义名为str的结构体 char c[11];};void sort(struct str *str,int n,int k);原创 2021-01-18 16:55:07 · 269 阅读 · 0 评论 -
7-29 删除字符串中的子串 (20分)【超级详细注释】
#include <stdio.h>#include <string.h>int main(){ char s1[81],s2[81],temp[81]={0},*k; //最长=80个字母+1个回车符;同时必须初始化数组 int len1,len2,len3; gets(s1); gets(s2); k=strstr(s1,s2); //在s1字符串中找到s2字符串的第一个位置,返回的是指针 while(k){原创 2021-01-18 00:15:12 · 959 阅读 · 1 评论 -
7-28 猴子选大王 (20分)
#include <stdio.h>int main(){ int n,a[1001]={0},k,num=1; //k表示猴子数目,num为报的数字 scanf("%d",&n); for(int i=1;i<=n;i++){ //将参与的猴子标记,参与标记为1,不参与为0,最开始全部从参与 a[i]=1; } k=n; while(k!=1){ //确定唯一猴王 k=0;原创 2021-01-16 00:39:15 · 110 阅读 · 0 评论 -
7-27 冒泡法排序 (20分)【大数后置】
#include <stdio.h>int main(){ int n,k,a[100]={0},t,tag=0; scanf("%d %d",&n,&k); for(int i=0;i<n;i++){ scanf("%d",&a[i]); } for(int i=n-1;i>=0;i--){ for(int j=1;j<=i;j++){ if(a[j-1原创 2021-01-15 23:32:00 · 164 阅读 · 0 评论 -
7-26 单词长度 (15分)【两种方法】
方法一:(极其复杂)#include <stdio.h>int main(){ int len=0,i=0,flag=1,tag=0; char c,s[100]; while(i<100){ scanf("%c",&c); s[i]=c; if(c=='.') break; i++; } for(int j=0;j<i;j++){ if(s[j]!=' '){ len++; flag=1; } else if(原创 2021-01-14 22:23:12 · 262 阅读 · 0 评论 -
7-23 币值转换 (20分)
#include <stdio.h>int main() { int m,a[9],t; for(int i=0;i<9;i++){ //将数组标记为-1; a[i]=-1; } scanf("%d",&m); if(m==0){ //如果输入的值为0; printf("a"); return 0; } for(int i=0;i<9&&原创 2021-01-14 20:06:18 · 293 阅读 · 0 评论 -
7-22 龟兔赛跑 (20分)
#include <stdio.h>int main() { int t,sr=0,st=0,flag=1,rest=0,back=0; //flag表示睡觉或奔跑状态;rest表示休息计时;back表示回头计时; scanf("%d",&t); for(int i=0;i<t;i++){ if(flag==0) //休息状态 rest++; else if(flag){ //奔跑状态 sr+=9; back++; if(sr>原创 2021-01-11 22:23:43 · 70 阅读 · 0 评论 -
7-16 求符合给定条件的整数集 (15分)【两种方法】
自己的方法:将所遍历的数字的每个位放在b[ ]数组中,所对应的位置+1,若数组中所对应的4个位置有三个1,即为所求数字。#include <stdio.h>int main() { int a,b[11]={0},rem,t,flag,sum,k=0; scanf("%d",&a); for(int i=100;i<1000;i++){ sum=0; flag=1; for(int j=0;j<10;j++){ b[j]=0; }原创 2021-01-11 20:11:10 · 1319 阅读 · 0 评论 -
7-15 计算圆周率 (15分)
#include <stdio.h>int main() { float dif,sum=1; float a=1,b=3,i=1,k=3; scanf("%f",&dif); while(a/b>=dif){ sum+=(a/b); i++; a*=i; k+=2; b*=k; } sum+=(a/b); //当误差小于dif时,要加上误差值 printf("%0.6f",2*sum); return 0;}...原创 2021-01-11 19:26:30 · 96 阅读 · 0 评论 -
7-4 BCD解密 (10分)
#include <stdio.h> int main() { int i,j,k; scanf("%d", &i); j = i / 16; k = i % 16; printf("%d\n", j*10+k); return 0;}原创 2021-01-09 22:45:45 · 75 阅读 · 0 评论 -
7-3 逆序的三位数(10分)【进阶版-任意位数】
#include <stdio.h>int main(){ int num,rem,flag=0; //rem余数,flag标记位 scanf("%d",&num); while(num){ rem=num%10; if(rem!=0) //直到遇到第一个非零数字,flag>0 flag++; if(flag) //flag>0后,出现的数字0需要被输出 printf("%d",rem); num/=10; } retur原创 2021-01-09 21:44:46 · 98 阅读 · 0 评论 -
7-2 然后是几点 (15分)
#include <stdio.h>int main(){ int begin,time,end; int hour,min; scanf("%d %d",&begin,&time); hour=begin/100; min=((begin%100)+time)%60; if(time>=0){ hour=(hour+((begin%100)+time)/60)%24; } else{ min+=60; hour=(hour+((beg原创 2021-01-09 20:49:21 · 103 阅读 · 0 评论 -
6-10 阶乘计算升级版 (20分)
void Print_Factorial ( const int N ){ if(N<0||N>1000){ printf("Invalid input"); return; } else if(N==0) printf("1"); return; else{ int a[100000]={0},i,j,len=1; a[0]=1; int add,carry=0; //add表示进位 for(i=1;i<=N;i++){// add原创 2021-01-07 21:14:22 · 101 阅读 · 0 评论 -
6-7 统计某类完全平方数 (20分)
int IsTheNumber ( const int N ){ int n=N; int b=sqrt(n),c; int a[10]={0}; if(b*b==n){ while(n){ c=n%10; a[c]++; n/=10; } } for(int i=0;i<10;i++) if(a[i]>1) return 1; return 0;}原创 2021-01-07 18:32:32 · 109 阅读 · 0 评论 -
6-11 求自定类型元素序列的中位数 (25分)
ElementType Median(ElementType A[], int N){ int i,j,step; float t; for(step=N/2;step>0;step/=2){ for(i=step;i<N;i++){ if(A[i-step]>A[i]){ t=A[i]; for(j=i-step;j>=0&&A[j]>t;j-=step){ A[j+step]=A[j]; } A[j原创 2021-01-07 18:29:45 · 135 阅读 · 0 评论