第一行输入整数
,表示测试用例数量。
随后
行,每行一个数字串
,长度
,保证所有用例数字串
的总长度
。
对每个用例输出 ``
`` 或 ``
``(大写),表示是否存在操作序列使得最终数字能被
整除。
9 123 322 333333333333 9997 5472778912773 1234567890 23 33 52254522632
NO YES YES NO NO YES NO YES YES
在第一组样例中,从整数中只能得到
、
、
和
,它们都不能被
整除。
在第二组样例中,需要将第二个数字替换为它的平方,那么就等于
。
在第三组样例中,整数已经可以被整除。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int t = scanner.nextInt();
scanner.nextLine(); // 吸收换行符
while (t-- > 0) {
String n = scanner.nextLine();
long sBase = 0; // 初始数字和
int cnt2 = 0; // 数字2的个数
int cnt3 = 0; // 数字3的个数
// 计算初始和及2、3的数量
for (char c : n.toCharArray()) {
int d = c - '0';
sBase += d;
if (d == 2) {
cnt2++;
} else if (d == 3) {
cnt3++;
}
}
boolean isGood = false;
// 枚举b的可能值(0, 1, 2),但不能超过实际数量cnt3
int maxB = Math.min(2, cnt3);
for (int b = 0; b <= maxB; b++) {
// 枚举a的可能值(0-8),但不能超过实际数量cnt2
int maxA = Math.min(8, cnt2);
for (int a = 0; a <= maxA; a++) {
// 计算当前总和:初始和 + 2a(每个2操作增加2) + 6b(每个3操作增加6)
long total = sBase + 2L * a + 6L * b;
if (total % 9 == 0) {
isGood = true;
break;
}
}
if (isGood) break;
}
System.out.println(isGood ? "YES" : "NO");
}
scanner.close();
}
}
#include <stdio.h>
#include <string.h>
int main() {
int t;
scanf("%d",&t);
while(t--){
char n[100005];
scanf("%s",n);
long long sum=0;
int len=strlen(n),num2=0,num3=0,flag=0;
for(int i=0;i<len;i++){
sum+=n[i]-'0';
if(n[i]=='2'){
num2++;
}
else if(n[i]=='3'){
num3++;
}
}
if(sum%9==0){
printf("YES\n");
}
else{
flag=0;
for(int i=0;i<=num2;i++){
for(int j=0;j<=num3;j++){
if((sum+i*2+j*6)%9==0){
printf("YES\n");
flag=1;
break;
}
}
}
if(flag==0){
printf("NO\n");
}
}
}
return 0;
} 这哪有问题呀 一个用例都没过😭😭救救孩子
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
int t;
scanf("%d",&t);
while(t--){
char *str = (char*)malloc(100001 * sizeof(char));
scanf("%s",str);
int length = strlen(str);
int num2 = 0;
int num3 = 0;
int sum = 0;
for(int i = 0; i < length; i++){
int temp = str[i] - '0';
sum += temp;
if(temp == 2){
num2++;
}
if(temp == 3){
num3++;
}
}
int flag = 0;
for(int i = 0; i <= num2; i++){
if(flag == 1)break;
for(int j = 0; j <= num3; j++){
int ans = sum + i * 2 + j * 6;
if(ans % 9 == 0){
flag = 1;
printf("YES\n");
break;
}
}
}
if(flag == 0){
printf("NO\n");
}
free(str);
}
} #include <bits/stdc++.h>
#define int long long
using namespace std;
void solve() {
string s;
cin >> s;
int n = s.size();
vector<int> a(n);
for (int i = 0; i < n; i++) {
a[i] = s[i] - '0';
}
int sum = accumulate(a.begin(), a.end(), 0ll);
if (sum % 9 == 0) {
cout << "YES\n";
return ;
}
vector<vector<int>> f(n + 1, vector<int> (10));
f[0][0] = 1;
for (int i = 0; i < n; i++) {
for (int j = 0; j < 9; j++) {
f[i + 1][(j + a[i]) % 9] |= f[i][j];
if (a[i]*a[i] < 10) {
f[i + 1][(j + a[i] * a[i] % 9) % 9] |= f[i][j];
}
}
}
cout << (f[n][0] ? "YES" : "NO") << "\n";
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T = 1;
cin >> T;
while (T--) {
solve();
}
return 0;
} t = int(input())
def solve():
s =list(map(int, input()))
total = sum(s)
f = total
# print(total)
if total%9==0:
print("YES")
return
h = {
2:0,
3:0
}
for i in s:
if i==2:
h[2]=h[2]+1
elif i==3:
h[3]=h[3]+1
# print(h)
for i in range(h[2]+1):
for j in range(h[3]+1):
total = total + i*2 + j*6
# print(total)
if total%9==0:
print("YES")
return
else:
total = f
print("NO")
for _ in range(t):
solve()
# 呃呃