admin管理员组

文章数量:1794759

【BJFUOJ入门题C代码参考答案】真正“入门”友好系列

【BJFUOJ入门题C代码参考答案】真正“入门”友好系列

#写在前面 本文里所有参考代码皆使用C,且几乎不涉及任何基础算法以外的算法。但也正因如此,在时间和效率方面一定会存在缺陷。和我一样的新手盆友们可以浅作参考、提出建议,也欢迎学长学姐们和大佬们分享更优解法!~~~~~

#C2.01金字塔++ 点击查看原题 虽然这是表姐夫入门里的第一题,但是就笔者个人而言难度上比后面那些基础的最大公约数之类的大很多,纯纯新手或其他专业的盆友们可以先越过前面几道题练手哦。 话不多说:上代码!

#include<stdio.h> int main() { int n; int i, j, k, t; scanf("%d", &n); for (i = 1; i <= n ; i++) { for (j = 1; j <= n - i; j++) printf(" "); for (k = 1; k <= i; k++) printf("%d", k); for (t = i - 1; t >= 1; t--) printf("%d", t); printf("\\n"); } return 0; }

#C6.01{A}+{B} 点击查看原题 在输入的操作组数未知且由输入时才决定的情况下,可以使用while (scanf("%d", &n) != EOF)语句。

#include<stdio.h> #define N 1000 int main() { int a[N]; int n, m, sum; int i, j, k; while (scanf("%d%d", &n, &m) != EOF) { for (i = 0; i < n; i++) scanf("%d", &a[i]); for (j = n; j < m + n; j++) scanf("%d", &a[j]); sum = n + m; for (i = 0; i < sum; i++) { for (j = i + 1; j < sum; j++) { if (a[i] == a[j]) { for (k = j; k < sum - 1; k++) a[k] = a[k+1]; sum--; j--; } } } int temp = 0; for (i = 0; i < sum - 1; i++) for (j = 0; j < sum - 1 - i; j++) { if (a[j] > a[j + 1]) { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } for (i = 0; i < sum; i++) { printf("%d", a[i]); if (i != sum - 1) printf(" "); } printf("\\n"); } return 0; }

#C6.02闰年展示 点击查看原题 这是古早一批的代码了,格式不规范,好在循环简单也能勉强看下去嘿嘿(挠头)

#include<stdio.h> int main() { int x,y; int i,k; int n=0; int years[2010]; scanf("%d%d",&x,&y); for(i=x;i<=y;i++) { if((i%4==0&&i%100!=0)||(i%400==0)) { //printf("%d ",i); years[n]=i; n++; } } printf("%d",n); printf("\\n"); for(k=0;k<n;k++){ printf("%d ",years[k]); } return 0; }

#C6.03文字处理 点击查看原题 (这个题用C真的很不友好,会C++的朋友可以直接略过哈哈哈哈哈)

实不相瞒,这个题的操作4我也是csdn出来的才在oj上的编译器通过,我自己写的那版自测时没发现问题(贴在参考代码的下面啦)求助大噶帮我看看究竟哪里有bug! =w=

#include<stdio.h> #include<string.h> #define N 100 char temp[N]; int main() { int n; int i; int option; char s[N]; scanf("%d", &n); scanf("%s", s); for (i = 0; i < n; i++) { scanf("%d", &option); switch (option) { case 1: { char s1[N]; scanf("%s", s1); strcat(s, s1); puts(s); break; } case 2: { int x, y; scanf("%d%d", &x ,&y); s[x+y] = '\\0'; strcpy(temp, &s[x]); strcpy(s, temp); puts(s); break; } case 3: { int j; char s2[N], s3[N]; scanf("%d", &j); strcpy(s3, &s[j]); scanf("%s", s2); s[j] = '\\0'; strcat(s, s2); strcat(s, s3); puts(s); break; } case 4: { int flag=0; int i, j; char keep[1000]={0}; scanf("%s",temp); for( i=0;s[i]!='\\0';i++) { if(s[i]==temp[0]) { for( j=0;j<strlen(temp);j++) { keep[j]=s[i+j]; } if(strcmp(keep,temp)==0) { printf("%d\\n",i); flag++; break; } } } if(!flag) printf("-1\\n"); break; } } } return 0; }

下面是自己的case 4:

int fact = 0; int k, t; char s4[N]; char temp[N]; strcpy(temp, s); scanf("%s", s4); if (strstr(s, s4) == NULL) fact = -1; else for (k = 0; s[k] != '\\0'; k++) { for (t = 0; t < strlen(s4); t++) { if (s[k] == s4[t]) { fact = k; } break; } } printf("%d", fact); break;

#C6.04随机数 点击查看原题 查重+删除+排序

#include<stdio.h> #define N 100 int main() { int n; int i, j, k; int temp; int a[N]; scanf("%d", &n); for (i = 0; i < n; i++) { scanf("%d", &a[i]); } for (i = 0; i < n; i++) { for (j = i + 1; j < n ; j++) { if (a[i] == a[j]) { for (k = j; k < n; k++) a[k] = a[k+1]; n--; j--; } } } for (i = 0; i < n - 1; i++) { for (j = 0; j < n - 1 - i ; j++) { if (a[j] > a[j+1]) { temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } printf("%d\\n", n); for (i = 0; i < n; i++) { printf("%d ", a[i]); } return 0; }

先更新这么多叭,未完待续~ 如果大家发现错误或有优化版,望不吝赐教!欢迎评论区留言!(搓手)

本文标签: 入门参考答案友好代码系列