求分享代码和解题思路,每个题目都有时间限制,做法尽量简单易懂,还有想问一下这种程序设计课听什么课做什么题会有提高?
那第二题来说事
就是一个通过计算机语言求分数的问题,给定一个算式,各项分子为1,分母是前一项分母的2倍,常规做法就是通分然后分子相加;通分后,分母是最后一项的分母,分子从右往左,从1开始,依次2倍关系。通分求和后,题目要求分子分母互质,那么要找到分子分母的最大公约数。那么初步源码如下
#include <stdio.h>
// 求最大公约数
int gcd(int a, int b)
{
if (a == b)
{
return a;
}
else if (a > b)
{
return gcd(a - b, b);
}
else
{
return gcd(b - a, a);
}
}
int main()
{
setvbuf(stdout, NULL, _IONBF, 0);
while(1)
{
int n = 0;
scanf("%d", &n);
// 分子
int numerator = 1;
// 分母
int denominator = 1;
// 通分后的分子项
int tmp = 1;
for (int i=0; i < n - 1; ++i)
{
tmp *= 2;
numerator += tmp;
}
denominator = tmp;
int gcd_num = gcd(numerator, denominator);
numerator /= gcd_num;
denominator /= gcd_num;
printf("%d/%d\n", numerator, denominator);
}
return 0;
}
运行后,你会发现,无论n为何值,最终的结果总是分子是分母的2倍减一关系,这种关系绝对是互质的,那么程序简化如下
#include <stdio.h>
int main()
{
setvbuf(stdout, NULL, _IONBF, 0);
while(1)
{
int n = 0;
scanf("%d", &n);
// 分子
int numerator = 1;
// 分母
int denominator = 1;
for (int i=0; i < n - 1; ++i)
{
denominator *= 2;
}
numerator = denominator * 2 - 1;
printf("%d/%d\n", numerator, denominator);
}
return 0;
}
最后说一下开发环境
去mooc听听浙大翁凯的c吧 也是我的研究生导师,真的太基础了不想写。c语言你要多打可以找个在线编译网站,这种博客也很多,最好要那种闯关的,可以让你学习到每个函数,只要学会指针就好啦,这些代码你可以用gpt做的
添加gpt的方法:使用我们开发的bing浏览器,点击拓展,搜索chatgpt,这里有很多公司自己建立的,有的免费有的要钱看你自己,简单的代码免费的就能完成
#include <stdio.h>
int isPrime(int num) {
if (num <= 1) {
return 0;
}
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
return 0;
}
}
return 1;
}
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int num;
scanf("%d", &num);
if (isPrime(num)) {
printf("%d\n", num);
}
}
return 0;
}
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
题目:输入一个整数,将其分解为质数的乘积。
思路:先从2开始检查被分解数是否能够整除,如果能则输出2,并将该数除以2,接着对3、5、7……也同样进行类似操作,直至这个数被分解完成。
代码示例:
#include<stdio.h>
#include<math.h>
int main(){
int n, i;
scanf("%d", &n);
printf("%d=", n);
for(i = 2; i <= sqrt(n); i++){
while(n % i == 0){
printf("%d", i);
n = n / i;
if(n != 1){
printf("*");
}
}
}
if(n != 1){
printf("%d", n);
}
return 0;
}
题目:统计一篇英文文章中单词的个数。
思路:将文章中每个单词都看作一个字符串,统计字符串的个数即可。
代码示例:
#include<stdio.h>
#include<string.h>
#define MAXN 1000
int main(){
char s[MAXN], word[MAXN];
int cnt = 0, i, j;
gets(s); // 输入英文文章
int len = strlen(s);
for(i = 0; i < len; i++){
if(s[i] != ' '){ // 如果不是空格,则是单词的一部分,将它加入word字符串中
word[cnt] = s[i];
cnt++;
}else{ // 如果是空格,则单词结束,cnt清零记录下一个单词
if(cnt > 0){
word[cnt] = '\0';
cnt = 0;
printf("单词:%s\n", word);
}
}
}
if(cnt > 0){ // 输出最后一个单词
word[cnt] = '\0';
printf("单词:%s\n", word);
}
return 0;
}
对于如何提高程序设计能力这个问题,我的建议是要多做题并且多实践。可以在网上找一些编程练习平台,例如LeetCode、牛客网等,做些算法题可以提高自己的编程水平和解题能力。此外,还可以学习一些数据结构、算法的知识,加深对编程的理解,提高自己的设计能力。最重要的是,多思考,多思考,多思考,这是成为一名好程序员的关键。
如果我的回答解决了您的问题,请采纳!
你好,会简单的,A的答案和思路:
#include<stdio.h>
// 判断一个整数是否是素数
// 如果是素数,返回1,否则返回0
int is_prime(int n) {
// 如果n小于等于1,直接返回0
if (n <= 1) {
return 0;
}
// 如果n等于2或3,直接返回1
if (n == 2 || n == 3) {
return 1;
}
// 如果n能被2或3整除,直接返回0
if (n % 2 == 0 || n % 3 == 0) {
return 0;
}
// 从5开始,每次增加2或4,检查是否能被n整除
// 只需要检查到sqrt(n)即可
int i = 5;
int w = 2;
while (i * i <= n) {
if (n % i == 0) {
return 0;
}
i += w;
w = 6 - w;
}
// 如果没有找到能整除n的数,返回1
return 1;
}
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int num;
scanf("%d", &num);
if (isPrime(num)) {
printf("%d\n", num);
}
}
return 0;
}