最初の質問
タイトルの説明:
置換暗号化を使用して4文字の文字列を暗号文にエンコードするプログラムを記述します。暗号化のルールは、元の文字をアルファベットの3番目の文字に置き換えることです。最後の3文字は、xがaに置き換えられるなど、最初の3文字に置き換えられることに注意してください。
入出力フォーマット:
入力:4文字
出力:4文字
入力例:
ABcx
出力例:
DEfa
样例代码
#include <stdio.h>
int main()
{
char a[5];
scanf("%s",a);
for(int i=0;i<4;i++)
{
if(a[i]>=120||(a[i]>=88&&a[i]<=90))
{
if(a[i]==120)a[i]=97;
if(a[i]==121)a[i]=98;
if(a[i]==122)a[i]=99;
if(a[i]==88)a[i]=65;
if(a[i]==89)a[i]=66;
if(a[i]==90)a[i]=67;
}
else
a[i]=a[i]+3;
}
printf("%s",a);
return 0;
}
第二の質問
タイトルの説明:
うるう年の計算。プログラムは、スペースで区切られた正の整数Yと別の正の整数Nを入力します。Yの後のN番目のうるう年の年を計算します(Y自体がうるう年である場合、Yの後の最初のうるう年はYです)。
プログラム入力:
YN
プログラム出力:
Y年が始まってからn番目のうるう年
入力例:
2005 3
出力例:
2016
参考代码
#include<stdio.h>
int main()
{
int y, n;
scanf_s("%d %d", &y, &n); //%d%d默认了两个整数之间有空格
for (y; n > 0; y++) //此法相较法二避免了分类讨论
{
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
n--;
}
printf("%d", y-1); //之所以是输出y-1,是因为当n减到1并且此时y对应的是闰年,n会--,但此时y++仍会执行;要是不减1而输出y,得到的结果每次都是正确结果+1的年份
//不合法语句//system ("pause");
return 0;
}
注:うるう年の判断は固定コードであり、理解する必要があります。
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)//判断闰年的语句
三番目の質問
メソッドの多様性
タイトルの説明:
市内で最も高い建物にエレベーターがあり、階数が入力された順にエレベーターが走ります。エレベーターはもともと0階にありました。入力シーケンスを実行した後、このフロアで停止し、フロア0に戻りません。エレベーターがシーケンスを実行する時間を計算するプログラムを記述します。各エレベーターが上がるまで6秒かかります。次の各レベルには4秒かかります。特定のフロアに滞在する場合、何人乗降しても5秒間滞在します。
プログラム入力:
エレベーターの走行シーケンス。フロアの値は1以上100未満であり、シーケンスの0はシーケンス入力の終わりを示します。たとえば、入力シーケンスが2 1 0の場合、エレベーターは最初に0階から2階に上がり、次に1階に下がります。
プログラム出力:
各シーケンスエレベーターの実行時間(秒)
入力例:
2 1 0
出力例:
26
参考代码
#include <stdio.h>
int main()
{
int current_floor;
int next_floor;
int sum;
current_floor = 0;
sum = 0;
int diff;
scanf_s("%d", &next_floor);
while (next_floor != 0)
{
diff = next_floor - current_floor;
if(diff>0)
{
sum = sum + diff * 6;
}
if (diff<0)
{
sum = sum + (-diff) * 4;
}
sum = sum + 5;
current_floor = next_floor;
scanf_s("%d", &next_floor);//循环输入next_floor直到next_floor==0
}
printf("%d", sum);
return 0;
}
4番目の質問
メソッドの多様性
タイトルの説明:
プログラムを記述します。文字列を入力するときは、その文字数を数えるだけでなく、大文字、小文字、数字、その他の文字の数も示す必要があります。
プログラム入力:
カウントされる文字列
プログラム出力:
5つの値は、大文字、小文字、数字、その他の文字、およびスペースで区切られた文字の総数です。
入力例:
I enjoyed reading these books very much
出力例:
1 32 0 6 39
参考代码
#include <stdio.h>
#include <string.h>
int main()
{
char a[100];
gets(a,100);//用gets也行,100表示缓冲区大小(可去)
int i;
i=strlen(a);
int total=0,num=0,cap=0,small=0,other=0;
for(int j=0;j<=i;j++)
{
if(a[j]=='\0')break;
if(a[j]>='A'&&a[j]<='Z')cap++;
else if(a[j]>='a'&&a[j]<='z')small++;
else if(a[j]>='0'&&a[j]<='9')num++;
else other++;
total++;
}
printf("%d %d %d %d %d",cap,small, num,other,total);
return 0;
}
問題5
さまざまな問題解決方法
タイトルの説明:
正の整数(例:7654321)を入力し、標準の3桁のセクション形式で整数を出力してください(カンマはスペイン語のコンマで、7,654,321など)。
**プログラム入力:*
セグメント化される正の整数
プログラム出力:
サブセクションの後の正の整数
入力例:
3456789
出力例:
3,456,789
参考代码
#include <stdio.h>
int main()
{
int a,i;
char s[30] = "";
scanf("%d",&a);
i = 0;
while(1)
{
s[i] = a%10 + '0';
a = a/10;
if(a==0)
{
break;
}
i++;
}//数位分离
printf("%c",s[i--]);
for(i;i>=0;i--)
{
if((i+1)%3== 0) /* i+1是是单个数字在数字字符串的位置,因为上面i是从0开始的*/
{
printf(",%c",s[i]);
}
else
{
printf("%c",s[i]);
}
}
return 0;
}
注:デジタル分離を使用したコード
int a,s[100];
int i=0;
while(1)
{
s[i] = a%10 + '0';
a = a/10;
if(a==0)
{
break;
}
i++;
}//数位分离
質問6
タイトルの説明:
nが素数かどうかを判別するには、整数n(n> = 2)を入力します。素数の場合は「YES」を出力し、それ以外の場合は「NO」を出力します。
プログラム入力:
整数n
プログラム出力:
素数の場合は「YES」を出力し、そうでない場合は「NO」を出力します。
入力例:
7
出力例:
YES
参考代码
#include <stdio.h>
int main()
{
int n, x;
scanf("%d", &n);
x = 0;
for (int i = n; i > 0; i--)
{
if (n % i == 0)x++;
}
if (x == 2)printf("YES");
else printf("NO");
return 0;
}
質問7
トピックの説明:
キーボードから正の整数(> 1)を入力し、整数を1に分解して各素因数を乗算します。入力した整数自体が素数である場合、それを1に分解し、数値自体を乗算する必要があります。
入出力フォーマット:
入力:1つの整数
出力:因数分解、小さいから大きいへの因数出力。例:1 2 2 * 3
入力例:
18
出力例:
1*2*3*3
参考代码
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
for(int i=1;i<=n;i++)
if (n % i == 0&&i!=n)
{
n = n / i;
printf("%d*", i);
i = 1;
}
else if(n%i==0&&i==n)
{
printf("%d", i);
break;
}
return 0;
}