這次培訓我們講了函式相關知識
相信大家已經掌握牢固

如果沒有掌握牢固的可以再看一下相關知識概念
函式相關概念
下面開始題解部分
題解
A 我知道你們這道題都會了

傳送門
你們確實會了,但大多數同學都沒運用本節課學習的函式
本嘉心糖很失望!!!!

AC代碼:
#include <stdio.h>
int x;
void solve()
{
if (x > 0)
printf("%d", x + 1);
else if (x == 0)
printf("0");
else
printf("%d", x - 1);
}
int main()
{
scanf("%d", &x);
solve();
return 0;
}
B 嘉然吃嘉心糖

沒想到這題之前比賽你們也做過…
傳送門
AC代碼:
#include <stdio.h>
int x, ans = 1;
void solve()
{
for (int i = 1; i < x; i++)
{
ans += 1;
ans *= 2;
}
printf("%d\n", ans);
}
int main()
{
scanf("%d", &x);
solve();
return 0;
}
C 圣嘉然嘗試學數學!

解題思路:回圈暴力跑先找出構成這個數的因子,并判斷這個因子是不是質數,知道找到最小的質因子,然后拿這個數去除以這個最小質因子就獲得最大質因子了
傳送門
AC代碼:
#include <bits/stdc++.h>
int main()
{
int n;
scanf("%d", &n);
for (int i = 2; i <= n; i++)
if (n % i == 0)
{
printf("%d", n / i);
break;
}
return 0;
}
D 接著冒泡

傳送門
解題思路:一道簡單的冒泡排序水題,冒泡,冒泡,就和水杯里的氣泡一樣
一個個跑到最上面,可以用每一個數去和其他所有的數比較,然后讓他交換到他所能達到的最終位置,
AC代碼:
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,t,cnt=0,tot=0;
long long a[100005];
void da(int l,int r){
for(int i=l;i<=r;i++){
for(int j=l;j<=r;j++){
if(a[i]<a[j]){
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
}
void xiao(int l,int r){
for(int i=l;i<=r;i++){
for(int j=l;j<=r;j++){
if(a[i]>a[j]){
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
}
int main() {
int l,r,k;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
while(m--){
scanf("%d%d%d",&l,&r,&k);
if(k==1){
xiao(l,r);
}else{
da(l,r);
}
}
for(int i=1;i<=n;i++) printf("%d ",a[i]);
return 0;
}
E 拿硬幣游戲

傳送門
解題思路:
AC代碼:
#include <stdio.h>
int t, n;
//首先是 0 先手就拿不了了,所以先手輸,再是 1 2 先手能直接拿完先手贏
//然后就是n>=3的情況,我們可以想 在這種情況下
//先手拿必定會將這個環斷開成一條線,那么后手的人必定能將這個線分成等
//量的兩根線(線是奇數在中間拿一個,偶數在中間拿兩個),在此之后先手
//的人能拿的話,后手也能拿(模仿先手拿即可,比如先手在一堆拿一個或兩
//個,那么后手在另一堆的相同位置拿相同的數量),所以最后先手必定會輸
int main()
{
scanf("%d", &t);
while (t--)
{
scanf("%d", &n);
if (n == 1 || n == 2)
printf("fcx\n");
else
printf("czq\n");
}
return 0;
}
F 特殊的素數

傳送門
AC代碼:
#include <stdio.h>
int a, b, flag;
//將一個數反序: 每次取出原數最后一位加在反序數的后面,然后將原數最后一位刪去,
int fanxu(int x)
{
int t = 0;
while (x)
{
t = t * 10 + x % 10;
x /= 10;
}
return t;
}
//首先注意 1 的情況 然后是列舉到 x-1 的話 可能超時
//我們可以想對于每個數n,其實并不需要從2判斷到n-1,我們知道,一個數若可以進行因數分解,
//那么分解時得到的兩個數一定是一個小于等于sqrt(n),一個大于等于sqrt(n),所以只需列舉到
//sqrt(n)就可以了 這樣能在判斷的數是素數是大量省時間
int panduan(int x)
{
if (x == 1)
return 0;
for (int i = 2; i <= x / i; i++) //注意如果不用sqrt 最好不要寫成 i*i<=x 因為i是int的話i*i會炸
if (x % i == 0)
return 0;
return 1;
}
int main()
{
scanf("%d %d", &a, &b);
for (int i = a; i <= b; i++)
if (panduan(i) && panduan(fanxu(i)))
{
if (flag) //flag不為0則不是第一個前面加,
printf(",%d", i);
else
printf("%d", i);
flag++;
}
if (!flag) //到最后flag為0 證明a到b沒有 輸出No
printf("No");
return 0;
}
講解完畢,感謝大家觀看

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/341937.html
標籤:其他
